From 064237ed6135c09a77c83c9186c84d2dcfad3c03 Mon Sep 17 00:00:00 2001 From: Peter Turi Date: Fri, 31 Jan 2025 14:02:23 +0100 Subject: [PATCH] feat: sent to customer at field (#2182) --- api/api.gen.go | 1074 ++++++++-------- api/client/go/client.gen.go | 1098 +++++++++-------- api/client/javascript/src/client/schemas.ts | 26 +- api/openapi.cloud.yaml | 938 +++++++------- api/openapi.yaml | 946 +++++++------- api/spec/src/billing/invoices/invoice.tsp | 6 + openmeter/app/sandbox/app.go | 8 +- openmeter/billing/adapter/invoice.go | 36 +- openmeter/billing/app.go | 31 +- openmeter/billing/httpdriver/invoice.go | 17 +- openmeter/billing/invoice.go | 13 +- openmeter/billing/service/invoicestate.go | 4 + openmeter/ent/db/billinginvoice.go | 16 +- .../ent/db/billinginvoice/billinginvoice.go | 8 + openmeter/ent/db/billinginvoice/where.go | 55 + openmeter/ent/db/billinginvoice_create.go | 78 ++ openmeter/ent/db/billinginvoice_update.go | 52 + openmeter/ent/db/migrate/schema.go | 15 +- openmeter/ent/db/mutation.go | 75 +- openmeter/ent/db/runtime.go | 4 +- openmeter/ent/db/setorclear.go | 14 + openmeter/ent/schema/billing.go | 4 + ...25127_billing-sent-to-customer-at.down.sql | 2 + ...1125127_billing-sent-to-customer-at.up.sql | 2 + tools/migrate/migrations/atlas.sum | 4 +- 25 files changed, 2460 insertions(+), 2066 deletions(-) create mode 100644 tools/migrate/migrations/20250131125127_billing-sent-to-customer-at.down.sql create mode 100644 tools/migrate/migrations/20250131125127_billing-sent-to-customer-at.up.sql diff --git a/api/api.gen.go b/api/api.gen.go index e229334b2..d9a3214e0 100644 --- a/api/api.gen.go +++ b/api/api.gen.go @@ -2288,6 +2288,9 @@ type Invoice struct { // Preceding Key information regarding previous invoices and potentially details as to why they were corrected. Preceding *[]InvoiceDocumentRef `json:"preceding,omitempty"` + // SentToCustomerAt The time the invoice was sent to customer. + SentToCustomerAt *time.Time `json:"sentToCustomerAt,omitempty"` + // Status The status of the invoice. // // This field only conatins a simplified status, for more detailed information use the statusDetails field. @@ -13075,541 +13078,542 @@ var swaggerSpec = []string{ "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", + "8e3H/z8AAP//uHRw8ChWBwA=", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/api/client/go/client.gen.go b/api/client/go/client.gen.go index 51e45b1f2..d1982f3cf 100644 --- a/api/client/go/client.gen.go +++ b/api/client/go/client.gen.go @@ -2290,6 +2290,9 @@ type Invoice struct { // Preceding Key information regarding previous invoices and potentially details as to why they were corrected. Preceding *[]InvoiceDocumentRef `json:"preceding,omitempty"` + // SentToCustomerAt The time the invoice was sent to customer. + SentToCustomerAt *time.Time `json:"sentToCustomerAt,omitempty"` + // Status The status of the invoice. // // This field only conatins a simplified status, for more detailed information use the statusDetails field. @@ -29365,553 +29368,554 @@ var swaggerSpec = []string{ "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", - "3s7n95///wAAAP//lgDElZuXBwA=", + "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", + "AA==", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/api/client/javascript/src/client/schemas.ts b/api/client/javascript/src/client/schemas.ts index ae7bc9cd2..d5662f459 100644 --- a/api/client/javascript/src/client/schemas.ts +++ b/api/client/javascript/src/client/schemas.ts @@ -4086,6 +4086,12 @@ export interface components { * @example 2023-01-01T01:01:01.001Z */ readonly voidedAt?: Date + /** + * Format: date-time + * @description The time the invoice was sent to customer. + * @example 2023-01-01T01:01:01.001Z + */ + readonly sentToCustomerAt?: Date /** @description The workflow associated with the invoice. * * It is always a snapshot of the workflow settings at the time of invoice creation. The @@ -6247,7 +6253,11 @@ export interface components { * Price * @description The price of the rate card. * When null, the feature or service is free. - * @example {} + * @example { + * "type": "flat", + * "amount": "100", + * "paymentTerm": "in_arrears" + * } */ price: components['schemas']['FlatPriceWithPaymentTerm'] | null } @@ -6773,7 +6783,9 @@ export interface components { * @example Customer Name */ displayName?: string | null - /** @example {} */ + /** @example { + * "hubspotId": "123456" + * } */ metadata?: { [key: string]: unknown } | null @@ -6816,7 +6828,9 @@ export interface components { * @example Customer Name */ displayName?: string | null - /** @example {} */ + /** @example { + * "hubspotId": "123456" + * } */ metadata?: { [key: string]: unknown } | null @@ -7089,7 +7103,11 @@ export interface components { * Price * @description The price of the rate card. * When null, the feature or service is free. - * @example {} + * @example { + * "type": "flat", + * "amount": "100", + * "paymentTerm": "in_arrears" + * } */ price: | (components['schemas']['FlatPriceWithPaymentTerm'] | null) diff --git a/api/openapi.cloud.yaml b/api/openapi.cloud.yaml index bc91c73a6..d88ed04b9 100644 --- a/api/openapi.cloud.yaml +++ b/api/openapi.cloud.yaml @@ -101,8 +101,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -164,8 +164,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -233,8 +233,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '204': description: 'There is no content to send for this request, but the headers may be useful. ' @@ -293,8 +293,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '204': description: 'There is no content to send for this request, but the headers may be useful. ' @@ -353,8 +353,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -427,9 +427,9 @@ paths: type: array items: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH - $ref: '#/components/parameters/Pagination.page' - $ref: '#/components/parameters/Pagination.pageSize' - $ref: '#/components/parameters/LimitOffset.offset' @@ -492,8 +492,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -569,8 +569,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -632,8 +632,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '204': description: 'There is no content to send for this request, but the headers may be useful. ' @@ -697,8 +697,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -962,8 +962,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH - name: expand in: query required: false @@ -1044,8 +1044,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '204': description: 'There is no content to send for this request, but the headers may be useful. ' @@ -1106,8 +1106,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -1181,8 +1181,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -1252,8 +1252,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -1319,8 +1319,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -1386,8 +1386,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -1455,8 +1455,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -1656,8 +1656,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '204': description: 'There is no content to send for this request, but the headers may be useful. ' @@ -1715,8 +1715,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH - name: expand in: query required: false @@ -1785,8 +1785,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -1972,8 +1972,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH - $ref: '#/components/parameters/PaginatedQuery.page' - $ref: '#/components/parameters/PaginatedQuery.pageSize' - $ref: '#/components/parameters/queryCustomerList.type' @@ -2038,8 +2038,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -2112,15 +2112,15 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH - name: appId in: path required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '204': description: 'There is no content to send for this request, but the headers may be useful. ' @@ -2190,7 +2190,7 @@ paths: schema: type: string format: date-time - example: 2023-01-01T01:01:01.001Z + example: '2023-01-01T01:01:01.001Z' responses: '200': description: The request has succeeded. @@ -2253,8 +2253,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -2316,8 +2316,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -2385,8 +2385,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '204': description: 'There is no content to send for this request, but the headers may be useful. ' @@ -2600,8 +2600,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -4122,8 +4122,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -4191,8 +4191,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -4257,8 +4257,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '204': description: 'There is no content to send for this request, but the headers may be useful. ' @@ -4321,7 +4321,7 @@ paths: schema: type: string format: date-time - example: 2023-01-01T01:01:01.001Z + example: '2023-01-01T01:01:01.001Z' - name: to in: query required: false @@ -4331,7 +4331,7 @@ paths: schema: type: string format: date-time - example: 2023-01-01T01:01:01.001Z + example: '2023-01-01T01:01:01.001Z' - name: feature in: query required: false @@ -4365,9 +4365,9 @@ paths: type: array items: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH - name: channel in: query required: false @@ -4379,9 +4379,9 @@ paths: type: array items: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH - $ref: '#/components/parameters/Pagination.page' - $ref: '#/components/parameters/Pagination.pageSize' - $ref: '#/components/parameters/NotificationEventOrderByOrdering.order' @@ -4667,8 +4667,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -4736,8 +4736,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -4802,8 +4802,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '204': description: 'There is no content to send for this request, but the headers may be useful. ' @@ -4862,8 +4862,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '201': description: The request has succeeded and a new resource has been created as a result. @@ -4994,9 +4994,9 @@ paths: type: array items: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH - name: key in: query required: false @@ -5139,9 +5139,9 @@ paths: schema: anyOf: - type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH - type: string minLength: 1 maxLength: 64 @@ -5211,8 +5211,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -5281,9 +5281,9 @@ paths: schema: anyOf: - type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH - type: string minLength: 1 maxLength: 64 @@ -5366,8 +5366,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '204': description: 'There is no content to send for this request, but the headers may be useful. ' @@ -5426,8 +5426,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -5490,8 +5490,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -6498,7 +6498,7 @@ paths: schema: type: string format: date-time - example: 2023-01-01T01:01:01.001Z + example: '2023-01-01T01:01:01.001Z' responses: '200': description: The request has succeeded. @@ -6709,7 +6709,7 @@ paths: schema: type: string format: date-time - example: 2023-01-01T01:01:01.001Z + example: '2023-01-01T01:01:01.001Z' - name: to in: query required: false @@ -6719,7 +6719,7 @@ paths: schema: type: string format: date-time - example: 2023-01-01T01:01:01.001Z + example: '2023-01-01T01:01:01.001Z' - name: windowSize in: query required: true @@ -6930,8 +6930,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH - name: at in: query required: false @@ -6939,7 +6939,7 @@ paths: schema: type: string format: date-time - example: 2023-01-01T01:01:01.001Z + example: '2023-01-01T01:01:01.001Z' responses: '200': description: The request has succeeded. @@ -7003,8 +7003,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -7079,8 +7079,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -7148,8 +7148,8 @@ paths: effectiveDate: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: If not provided the subscription is canceled immediately. + example: '2023-01-01T01:01:01.001Z' /api/v1/subscriptions/{subscriptionId}/change: post: operationId: changeSubscription @@ -7163,8 +7163,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -7239,8 +7239,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -7319,8 +7319,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -7494,9 +7494,9 @@ components: type: array items: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH InvoiceListParams.expand: name: expand in: query @@ -7531,7 +7531,7 @@ components: schema: type: string format: date-time - example: 2023-01-01T01:01:01.001Z + example: '2023-01-01T01:01:01.001Z' InvoiceListParams.issuedBefore: name: issuedBefore in: query @@ -7540,7 +7540,7 @@ components: schema: type: string format: date-time - example: 2023-01-01T01:01:01.001Z + example: '2023-01-01T01:01:01.001Z' InvoiceListParams.statuses: name: statuses in: query @@ -7629,7 +7629,7 @@ components: schema: type: string format: date-time - example: 2023-01-01T01:01:01.001Z + example: '2023-01-01T01:01:01.001Z' MeterQuery.groupBy: name: groupBy in: query @@ -7661,7 +7661,7 @@ components: schema: type: string format: date-time - example: 2023-01-01T01:01:01.001Z + example: '2023-01-01T01:01:01.001Z' MeterQuery.windowSize: name: windowSize in: query @@ -7943,9 +7943,9 @@ components: Annotations: type: object additionalProperties: {} + description: Set of key-value pairs managed by the system. Cannot be modified by user. example: externalId: 019142cc-a016-796a-8113-1a942fecd26d - description: Set of key-value pairs managed by the system. Cannot be modified by user. App: anyOf: - $ref: '#/components/schemas/StripeApp' @@ -8012,15 +8012,15 @@ components: description: type: string description: The capability description. + description: |- + App capability. + + Capabilities only exist in config so they don't extend the Resource model. example: type: collectPayments key: stripe_collect_payment name: Collect Payments description: Stripe payments collects outstanding revenue with Stripe customer's default payment method. - description: |- - App capability. - - Capabilities only exist in config so they don't extend the Resource model. AppCapabilityType: type: string enum: @@ -8063,9 +8063,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The ID of the app. + example: 01G65Z755AFWAKHE12NY0CQ9FH description: |- App reference @@ -8099,14 +8099,14 @@ components: usage: type: number format: double - example: 100 description: The total usage of the feature in the period. + example: 100 readOnly: true balanceAtStart: type: number format: double - example: 100 description: The entitlement balance at the start of the period. + example: 100 readOnly: true description: The balance history window. BillingLineCharge: @@ -8120,29 +8120,29 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ID of the charge or discount. + example: 01G65Z755AFWAKHE12NY0CQ9FH readOnly: true percent: allOf: @@ -8223,9 +8223,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true name: @@ -8249,22 +8249,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true supplier: @@ -8344,27 +8344,27 @@ components: tax: anyOf: - type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH - type: string description: The tax app used for this workflow x-go-type: string invoicing: anyOf: - type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH - type: string description: The invoicing app used for this workflow x-go-type: string payment: anyOf: - type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH - type: string description: The payment app used for this workflow x-go-type: string @@ -8428,22 +8428,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true workflow: @@ -8452,12 +8452,12 @@ components: description: The details of the overrides active for this specific customer. billingProfile: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: |- The billing profile this override is associated with. If not provided, the default billing profile is chosen if available. + example: 01G65Z755AFWAKHE12NY0CQ9FH description: Customer specific workflow overrides. BillingProfileCustomerOverrideCreate: type: object @@ -8468,12 +8468,12 @@ components: description: The details of the overrides active for this specific customer. billingProfile: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: |- The billing profile this override is associated with. If not provided, the default billing profile is chosen if available. + example: 01G65Z755AFWAKHE12NY0CQ9FH description: Payload for creating a new or updating an existing customer override. BillingProfileCustomerOverrideOrderBy: type: string @@ -8490,16 +8490,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -8584,16 +8584,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -8698,12 +8698,12 @@ components: interval: type: string format: ISO8601 - example: P1D description: |- 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. + example: P1D default: PT1H description: Workflow collection specifies how to collect the pending line items for an invoice BillingWorkflowCreate: @@ -8732,14 +8732,14 @@ components: draftPeriod: type: string format: ISO8601 - example: P1D description: The period for the invoice to be kept in draft status for manual reviews. + example: P1D default: P1D dueAfter: type: string format: ISO8601 - example: P1D description: The period after which the invoice is due. + example: P1D default: P7D progressiveBilling: type: boolean @@ -8817,13 +8817,13 @@ components: description: The request could not be completed due to a conflict with the current state of the target resource. CountryCode: type: string - example: US minLength: 2 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. + example: US CreateCheckoutSessionTaxIdCollection: type: object required: @@ -8942,9 +8942,9 @@ components: properties: appId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: If not provided, the default Stripe app is used if any. + example: 01G65Z755AFWAKHE12NY0CQ9FH customer: anyOf: - $ref: '#/components/schemas/CustomerId' @@ -8963,6 +8963,7 @@ components: allOf: - $ref: '#/components/schemas/CreateStripeCheckoutSessionRequestOptions' description: Options passed to Stripe when creating the checkout session. + description: Create Stripe checkout session request. example: customer: name: ACME, Inc. @@ -8980,7 +8981,6 @@ components: customerUpdate: name: auto address: auto - description: Create Stripe checkout session request. CreateStripeCheckoutSessionRequestOptions: type: object properties: @@ -9072,9 +9072,9 @@ components: properties: customerId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The OpenMeter customer ID. + example: 01G65Z755AFWAKHE12NY0CQ9FH stripeCustomerId: type: string description: The Stripe customer ID. @@ -9117,8 +9117,8 @@ components: issuedAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: IssueAt reflects the time the document was issued. + example: '2023-01-01T01:01:01.001Z' readOnly: true number: allOf: @@ -9158,13 +9158,13 @@ components: description: Currency describes a currency supported by OpenMeter. CurrencyCode: type: string - example: USD minLength: 3 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. + example: USD CustomPlanInput: type: object allOf: @@ -9218,8 +9218,8 @@ components: activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T01:01:01.001Z' customPlan: $ref: '#/components/schemas/CustomPlanInput' description: Change a custom subscription. @@ -9233,15 +9233,15 @@ components: activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T01:01:01.001Z' customPlan: $ref: '#/components/schemas/CustomPlanInput' customerId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH description: Create a custom subscription. Customer: type: object @@ -9254,9 +9254,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true name: @@ -9280,22 +9280,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true key: @@ -9330,20 +9330,20 @@ components: title: Billing Address currentSubscriptionId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The ID of the Subscription if the customer has one. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: Current Subscription ID readOnly: true + description: A customer object. example: id: 01G65Z755AFWAKHE12NY0CQ9FH name: ACME Inc. usageAttribution: subjectKeys: - my_subject_key - createdAt: 2024-01-01T01:01:01.001Z - updatedAt: 2024-01-01T01:01:01.001Z - description: A customer object. + createdAt: '2024-01-01T01:01:01.001Z' + updatedAt: '2024-01-01T01:01:01.001Z' CustomerAppData: anyOf: - $ref: '#/components/schemas/StripeCustomerAppData' @@ -9367,16 +9367,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -9445,9 +9445,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH description: Create Stripe checkout session with customer ID. CustomerKey: type: object @@ -9474,16 +9474,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -9707,22 +9707,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true metadata: @@ -9732,18 +9732,18 @@ components: activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence start of the resource. + example: '2023-01-01T01:01:01.001Z' activeTo: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence end of the resource. + example: '2023-01-01T01:01:01.001Z' id: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: Readonly unique ULID identifier. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV readOnly: true type: allOf: @@ -9766,9 +9766,9 @@ components: example: example-feature-key featureId: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The feature the subject is entitled to use. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV currentUsagePeriod: allOf: - $ref: '#/components/schemas/Period' @@ -9797,22 +9797,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true metadata: @@ -9822,18 +9822,18 @@ components: activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence start of the resource. + example: '2023-01-01T01:01:01.001Z' activeTo: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence end of the resource. + example: '2023-01-01T01:01:01.001Z' id: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: Readonly unique ULID identifier. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV readOnly: true subjectKey: type: string @@ -9851,9 +9851,9 @@ components: example: example-feature-key featureId: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The feature the subject is entitled to use. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV currentUsagePeriod: allOf: - $ref: '#/components/schemas/Period' @@ -9881,11 +9881,11 @@ components: example: example-feature-key featureId: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: |- The feature the subject is entitled to use. Either featureKey or featureId is required. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV metadata: allOf: - $ref: '#/components/schemas/Metadata' @@ -9925,34 +9925,33 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true amount: type: number format: double - example: 100 minimum: 0 description: The amount to grant. Should be a positive number. + example: 100 priority: type: integer format: uint8 - example: 1 minimum: 1 maximum: 255 description: |- @@ -9962,11 +9961,12 @@ components: When there are several grants available for the same subject, the system selects the grant with the highest priority. In cases where grants share the same priority level, the grant closest to its expiration will be used first. In the case of two grants have identical priorities and expiration dates, the system will use the grant that was created first. + example: 1 effectiveAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: Effective date for grants and anchor for recurring grants. Provided value will be ceiled to metering windowSize (minute). + example: '2023-01-01T01:01:01.001Z' expiration: allOf: - $ref: '#/components/schemas/ExpirationPeriod' @@ -9974,52 +9974,52 @@ components: maxRolloverAmount: type: number format: double - example: 100 description: |- Grants are rolled over at reset, after which they can have a different balance compared to what they had before the reset. Balance after the reset is calculated as: Balance_After_Reset = MIN(MaxRolloverAmount, MAX(Balance_Before_Reset, MinRolloverAmount)) + example: 100 default: 0 minRolloverAmount: type: number format: double - example: 100 description: |- Grants are rolled over at reset, after which they can have a different balance compared to what they had before the reset. Balance after the reset is calculated as: Balance_After_Reset = MIN(MaxRolloverAmount, MAX(Balance_Before_Reset, MinRolloverAmount)) + example: 100 default: 0 metadata: allOf: - $ref: '#/components/schemas/Metadata' + description: The grant metadata. example: stripePaymentId: pi_4OrAkhLvyihio9p51h9iiFnB - description: The grant metadata. id: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: Readonly unique ULID identifier. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV readOnly: true entitlementId: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV description: The unique entitlement ULID that the grant is associated with. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV readOnly: true nextRecurrence: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The next time the grant will recurr. + example: '2023-01-01T01:01:01.001Z' expiresAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time the grant expires. + example: '2023-01-01T01:01:01.001Z' readOnly: true voidedAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time the grant was voided. + example: '2023-01-01T01:01:01.001Z' recurrence: allOf: - $ref: '#/components/schemas/RecurringPeriod' @@ -10035,13 +10035,12 @@ components: amount: type: number format: double - example: 100 minimum: 0 description: The amount to grant. Should be a positive number. + example: 100 priority: type: integer format: uint8 - example: 1 minimum: 1 maximum: 255 description: |- @@ -10051,11 +10050,12 @@ components: When there are several grants available for the same subject, the system selects the grant with the highest priority. In cases where grants share the same priority level, the grant closest to its expiration will be used first. In the case of two grants have identical priorities and expiration dates, the system will use the grant that was created first. + example: 1 effectiveAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: Effective date for grants and anchor for recurring grants. Provided value will be ceiled to metering windowSize (minute). + example: '2023-01-01T01:01:01.001Z' expiration: allOf: - $ref: '#/components/schemas/ExpirationPeriod' @@ -10063,25 +10063,25 @@ components: maxRolloverAmount: type: number format: double - example: 100 description: |- Grants are rolled over at reset, after which they can have a different balance compared to what they had before the reset. Balance after the reset is calculated as: Balance_After_Reset = MIN(MaxRolloverAmount, MAX(Balance_Before_Reset, MinRolloverAmount)) + example: 100 default: 0 minRolloverAmount: type: number format: double - example: 100 description: |- Grants are rolled over at reset, after which they can have a different balance compared to what they had before the reset. Balance after the reset is calculated as: Balance_After_Reset = MIN(MaxRolloverAmount, MAX(Balance_Before_Reset, MinRolloverAmount)) + example: 100 default: 0 metadata: allOf: - $ref: '#/components/schemas/Metadata' + description: The grant metadata. example: stripePaymentId: pi_4OrAkhLvyihio9p51h9iiFnB - description: The grant metadata. recurrence: allOf: - $ref: '#/components/schemas/RecurringPeriodCreateInput' @@ -10143,22 +10143,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true metadata: @@ -10168,18 +10168,18 @@ components: activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence start of the resource. + example: '2023-01-01T01:01:01.001Z' activeTo: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence end of the resource. + example: '2023-01-01T01:01:01.001Z' id: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: Readonly unique ULID identifier. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV readOnly: true subjectKey: type: string @@ -10197,14 +10197,14 @@ components: example: example-feature-key featureId: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The feature the subject is entitled to use. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV lastReset: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time the last reset happened. + example: '2023-01-01T01:01:01.001Z' readOnly: true currentUsagePeriod: allOf: @@ -10214,8 +10214,8 @@ components: measureUsageFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time from which usage is measured. If not specified on creation, defaults to entitlement creation time. + example: '2023-01-01T01:01:01.001Z' readOnly: true usagePeriod: allOf: @@ -10242,11 +10242,11 @@ components: example: example-feature-key featureId: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: |- The feature the subject is entitled to use. Either featureKey or featureId is required. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV metadata: allOf: - $ref: '#/components/schemas/Metadata' @@ -10313,16 +10313,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -10349,27 +10349,27 @@ components: config: type: string format: json - example: '{ "integrations": ["github"] }' description: The JSON parsable config of the entitlement. This value is also returned when checking entitlement access and it is useful for configuring fine-grained access settings to the feature, implemented in your own system. Has to be an object. + example: '{ "integrations": ["github"] }' createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true metadata: @@ -10379,18 +10379,18 @@ components: activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence start of the resource. + example: '2023-01-01T01:01:01.001Z' activeTo: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence end of the resource. + example: '2023-01-01T01:01:01.001Z' id: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: Readonly unique ULID identifier. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV readOnly: true subjectKey: type: string @@ -10408,9 +10408,9 @@ components: example: example-feature-key featureId: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The feature the subject is entitled to use. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV currentUsagePeriod: allOf: - $ref: '#/components/schemas/Period' @@ -10437,11 +10437,11 @@ components: example: example-feature-key featureId: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: |- The feature the subject is entitled to use. Either featureKey or featureId is required. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV metadata: allOf: - $ref: '#/components/schemas/Metadata' @@ -10457,8 +10457,8 @@ components: config: type: string format: json - example: '{ "integrations": ["github"] }' description: The JSON parsable config of the entitlement. This value is also returned when checking entitlement access and it is useful for configuring fine-grained access settings to the feature, implemented in your own system. Has to be an object. + example: '{ "integrations": ["github"] }' description: Create inputs for static entitlement EntitlementType: type: string @@ -10475,31 +10475,31 @@ components: properties: hasAccess: type: boolean - example: true description: Whether the subject has access to the feature. Shared accross all entitlement types. + example: true readOnly: true balance: type: number format: double - example: 100 description: Only available for metered entitlements. Metered entitlements are built around a balance calculation where feature usage is deducted from the issued grants. Balance represents the remaining balance of the entitlement, it's value never turns negative. + example: 100 readOnly: true usage: type: number format: double - example: 50 description: Only available for metered entitlements. Returns the total feature usage in the current period. + example: 50 readOnly: true overage: type: number format: double - example: 0 description: Only available for metered entitlements. Overage represents the usage that wasn't covered by grants, e.g. if the subject had a total feature usage of 100 in the period but they were only granted 80, there would be 20 overage. + example: 0 readOnly: true config: type: string - example: '{ key: "value" }' description: Only available for static entitlements. The JSON parsable config of the entitlement. + example: '{ key: "value" }' readOnly: true description: Entitlements are the core of OpenMeter access management. They define access to features for subjects. Entitlements can be metered, boolean, or static. Event: @@ -10513,33 +10513,33 @@ components: properties: id: type: string - example: 5c10fade-1c9e-4d6c-8275-c52c36731d3c minLength: 1 description: Identifies the event. + example: 5c10fade-1c9e-4d6c-8275-c52c36731d3c source: type: string - example: service-name minLength: 1 format: uri-reference description: Identifies the context in which an event happened. + example: service-name specversion: type: string - example: '1.0' minLength: 1 description: The version of the CloudEvents specification which the event uses. + example: '1.0' default: '1.0' type: type: string - example: com.example.someevent minLength: 1 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 - example: application/json description: Content type of the CloudEvents data value. Only the value "application/json" is allowed over HTTP. + example: application/json dataschema: type: string format: uri @@ -10548,14 +10548,14 @@ components: description: Identifies the schema that data adheres to. subject: type: string - example: customer-id minLength: 1 description: Describes the subject of the event in the context of the event producer (identified by source). + example: customer-id time: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: Timestamp of when the occurrence happened. Must adhere to RFC 3339. + example: '2023-01-01T01:01:01.001Z' nullable: true data: type: object @@ -10564,18 +10564,18 @@ components: description: |- The event payload. Optional, if present it must be a JSON object. + description: |- + CloudEvents Specification JSON Schema + + Optional properties are nullable according to the CloudEvents specification: + OPTIONAL not omitted attributes MAY be represented as a null JSON value. example: id: 5c10fade-1c9e-4d6c-8275-c52c36731d3c source: service-name specversion: '1.0' type: prompt subject: customer-id - time: 2023-01-01T01:01:01.001Z - description: |- - CloudEvents Specification JSON Schema - - Optional properties are nullable according to the CloudEvents specification: - OPTIONAL not omitted attributes MAY be represented as a null JSON value. + time: '2023-01-01T01:01:01.001Z' x-go-type-import: path: github.com/cloudevents/sdk-go/v2/event x-go-type: event.Event @@ -10600,8 +10600,8 @@ components: description: The unit of time for the expiration period. count: type: integer - example: 12 description: The number of time units in the expiration period. + example: 12 description: The grant expiration definition Feature: type: object @@ -10615,29 +10615,29 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true archivedAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: Timestamp of when the resource was archived. + example: '2023-01-01T01:01:01.001Z' title: Archival Time readOnly: true key: @@ -10653,35 +10653,35 @@ components: metadata: allOf: - $ref: '#/components/schemas/Metadata' + title: Optional metadata example: key: value - title: Optional metadata meterSlug: type: string minLength: 1 maxLength: 64 pattern: ^[a-z0-9]+(?:_[a-z0-9]+)*$ description: A key is a unique string that is used to identify a resource. - example: tokens_total title: Meter slug + example: tokens_total meterGroupByFilters: type: object additionalProperties: type: string - example: - model: gpt-4 - type: input description: |- Optional meter group by filters. Useful if the meter scope is broader than what feature tracks. Example scenario would be a meter tracking all token use with groupBy fields for the model, then the feature could filter for model=gpt-4. title: Meter group by filters + example: + model: gpt-4 + type: input id: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: Readonly unique ULID identifier. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV readOnly: true description: |- Represents a feature that can be enabled or disabled for a plan. @@ -10705,30 +10705,30 @@ components: metadata: allOf: - $ref: '#/components/schemas/Metadata' + title: Optional metadata example: key: value - title: Optional metadata meterSlug: type: string minLength: 1 maxLength: 64 pattern: ^[a-z0-9]+(?:_[a-z0-9]+)*$ description: A key is a unique string that is used to identify a resource. - example: tokens_total title: Meter slug + example: tokens_total meterGroupByFilters: type: object additionalProperties: type: string - example: - model: gpt-4 - type: input description: |- Optional meter group by filters. Useful if the meter scope is broader than what feature tracks. Example scenario would be a meter tracking all token use with groupBy fields for the model, then the feature could filter for model=gpt-4. title: Meter group by filters + example: + model: gpt-4 + type: input description: |- Represents a feature that can be enabled or disabled for a plan. Used both for product catalog and entitlements. @@ -10740,17 +10740,17 @@ components: properties: id: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: Unique identifier of a feature. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV title: Feature Unique Identifier key: type: string - example: gpt4_tokens description: |- The key is an immutable unique identifier of the feature used throughout the API, for example when interacting with a subject's entitlements. title: Feature Key + example: gpt4_tokens description: Limited representation of a feature resource which includes only its unique identifiers (id, key). FeatureOrderBy: type: string @@ -10769,16 +10769,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -10853,44 +10853,44 @@ components: usage: type: number format: double - example: 100 description: The total usage of the grant in the period. + example: 100 readOnly: true overage: type: number format: double - example: 100 description: Overuse that wasn't covered by grants. + example: 100 readOnly: true balanceAtStart: type: number format: double - example: 100 description: entitlement balance at the start of the period. + example: 100 readOnly: true grantBalancesAtStart: type: object additionalProperties: type: number format: double + description: 'The balance breakdown of each active grant at the start of the period: GrantID: Balance' example: 01G65Z755AFWAKHE12NY0CQ9FH: 100 - description: 'The balance breakdown of each active grant at the start of the period: GrantID: Balance' readOnly: true balanceAtEnd: type: number format: double - example: 100 description: The entitlement balance at the end of the period. + example: 100 readOnly: true grantBalancesAtEnd: type: object additionalProperties: type: number format: double + description: 'The balance breakdown of each active grant at the end of the period: GrantID: Balance' example: 01G65Z755AFWAKHE12NY0CQ9FH: 100 - description: 'The balance breakdown of each active grant at the end of the period: GrantID: Balance' readOnly: true grantUsages: type: array @@ -10919,16 +10919,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -10943,14 +10943,14 @@ components: properties: grantId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The id of the grant + example: 01G65Z755AFWAKHE12NY0CQ9FH usage: type: number format: double - example: 100 description: The usage in the period + example: 100 description: Usage Record IDResource: type: object @@ -10959,9 +10959,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true description: IDResource is a resouce with an ID. @@ -10991,13 +10991,14 @@ components: ingestedAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The date and time the event was ingested. + example: '2023-01-01T01:01:01.001Z' storedAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The date and time the event was stored. + example: '2023-01-01T01:01:01.001Z' + description: An ingested event with optional validation error. example: event: id: 5c10fade-1c9e-4d6c-8275-c52c36731d3c @@ -11005,10 +11006,9 @@ components: specversion: '1.0' type: prompt subject: customer-id - time: 2023-01-01T01:01:01.001Z - ingestedAt: 2023-01-01T01:01:01.001Z - storedAt: 2023-01-01T01:01:02.001Z - description: An ingested event with optional validation error. + time: '2023-01-01T01:01:01.001Z' + ingestedAt: '2023-01-01T01:01:01.001Z' + storedAt: '2023-01-01T01:01:02.001Z' InternalServerErrorProblemResponse: type: object allOf: @@ -11032,9 +11032,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true description: @@ -11052,22 +11052,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true type: @@ -11137,29 +11137,29 @@ components: issuedAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: |- The time the invoice was issued. Depending on the status of the invoice this can mean multiple things: - draft, gathering: The time the invoice will be issued based on the workflow settings. - issued: The time the invoice was issued. + example: '2023-01-01T01:01:01.001Z' readOnly: true draftUntil: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: |- The time until the invoice is in draft status. On draft invoice creation it is calculated from the workflow settings. If manual approval is required, the draftUntil time is set. + example: '2023-01-01T01:01:01.001Z' dueAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: Due time of the fulfillment of the invoice (if available). + example: '2023-01-01T01:01:01.001Z' readOnly: true period: allOf: @@ -11168,11 +11168,17 @@ components: voidedAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: |- The time the invoice was voided. If the invoice was voided, this field will be set to the time the invoice was voided. + example: '2023-01-01T01:01:01.001Z' + readOnly: true + sentToCustomerAt: + type: string + format: date-time + description: The time the invoice was sent to customer. + example: '2023-01-01T01:01:01.001Z' readOnly: true workflow: allOf: @@ -11349,29 +11355,29 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ID of the line. + example: 01G65Z755AFWAKHE12NY0CQ9FH managedBy: allOf: - $ref: '#/components/schemas/InvoiceLineManagedBy' @@ -11445,8 +11451,8 @@ components: invoiceAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time this line item should be invoiced. + example: '2023-01-01T01:01:01.001Z' externalIds: allOf: - $ref: '#/components/schemas/InvoiceLineAppExternalIds' @@ -11523,8 +11529,8 @@ components: invoiceAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time this line item should be invoiced. + example: '2023-01-01T01:01:01.001Z' type: type: string enum: @@ -11550,9 +11556,9 @@ components: default: regular id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The ID of the line. + example: 01G65Z755AFWAKHE12NY0CQ9FH description: |- InvoiceFlatFeeLineReplaceUpdate represents the update model for a flat fee invoice line. @@ -11605,8 +11611,8 @@ components: invoiceAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time this line item should be invoiced. + example: '2023-01-01T01:01:01.001Z' type: type: string enum: @@ -11632,9 +11638,9 @@ components: default: regular customerId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The customer this line item belongs to. + example: 01G65Z755AFWAKHE12NY0CQ9FH description: InvoiceFlatFeePendingLineCreate represents the create model for an invoice line that is sold to the customer as a manually added fee. InvoiceGenericDocumentRef: type: object @@ -11693,29 +11699,29 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ID of the charge or discount. + example: 01G65Z755AFWAKHE12NY0CQ9FH readOnly: true percent: allOf: @@ -11823,7 +11829,6 @@ components: description: TaxConfig stores the configuration for a tax line relative to an invoice line. InvoiceNumber: type: string - example: INV-2024-01-01-01 minLength: 1 maxLength: 256 description: |- @@ -11833,6 +11838,7 @@ components: 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) + example: INV-2024-01-01-01 InvoiceOrderBy: type: string enum: @@ -11852,16 +11858,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -11895,9 +11901,9 @@ components: type: array items: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH description: |- The pending line items to include in the invoice, if not provided: - all line items that have invoice_at < asOf will be included @@ -11906,16 +11912,16 @@ components: asOf: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: |- The time as of which the invoice is created. If not provided, the current time is used. + example: '2023-01-01T01:01:01.001Z' customerId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The customer ID for which to create the invoice. + example: 01G65Z755AFWAKHE12NY0CQ9FH description: |- BillingInvoiceActionInput is the input for creating an invoice. @@ -11928,9 +11934,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The ID of the invoice. + example: 01G65Z755AFWAKHE12NY0CQ9FH readOnly: true number: allOf: @@ -11961,13 +11967,13 @@ components: draftUntil: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: |- The time until the invoice is in draft status. On draft invoice creation it is calculated from the workflow settings. If manual approval is required, the draftUntil time is set. + example: '2023-01-01T01:01:01.001Z' supplier: allOf: - $ref: '#/components/schemas/BillingPartyReplaceUpdate' @@ -12028,8 +12034,8 @@ components: invoiceAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time this line item should be invoiced. + example: '2023-01-01T01:01:01.001Z' type: type: string enum: @@ -12055,12 +12061,12 @@ components: default: regular id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: |- ID of the line. If not specified it will be auto-generated. When discounts are specified, this must be provided, so that the discount can reference it. + example: 01G65Z755AFWAKHE12NY0CQ9FH description: InvoiceSimulationFlatFeeLine represents a flat fee line item that can be input to the simulation endpoint. InvoiceSimulationInput: type: object @@ -12138,8 +12144,8 @@ components: invoiceAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time this line item should be invoiced. + example: '2023-01-01T01:01:01.001Z' type: type: string enum: @@ -12165,12 +12171,12 @@ components: description: The quantity of the item used before this line's period, if the line is billed progressively. id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: |- ID of the line. If not specified it will be auto-generated. When discounts are specified, this must be provided, so that the discount can reference it. + example: 01G65Z755AFWAKHE12NY0CQ9FH description: InvoiceSimulationUsageBasedLine represents a usage-based line item that can be input to the simulation endpoint. InvoiceStatus: type: string @@ -12303,29 +12309,29 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ID of the line. + example: 01G65Z755AFWAKHE12NY0CQ9FH managedBy: allOf: - $ref: '#/components/schemas/InvoiceLineManagedBy' @@ -12399,8 +12405,8 @@ components: invoiceAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time this line item should be invoiced. + example: '2023-01-01T01:01:01.001Z' externalIds: allOf: - $ref: '#/components/schemas/InvoiceLineAppExternalIds' @@ -12482,8 +12488,8 @@ components: invoiceAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time this line item should be invoiced. + example: '2023-01-01T01:01:01.001Z' type: type: string enum: @@ -12501,9 +12507,9 @@ components: description: The feature that the usage is based on. id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The ID of the line. + example: 01G65Z755AFWAKHE12NY0CQ9FH description: |- InvoiceUpdateUsageBasedLineReplaceUpdate represents the update model for an UBP invoice line. @@ -12556,8 +12562,8 @@ components: invoiceAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time this line item should be invoiced. + example: '2023-01-01T01:01:01.001Z' type: type: string enum: @@ -12575,9 +12581,9 @@ components: description: The feature that the usage is based on. customerId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The customer this line item belongs to. + example: 01G65Z755AFWAKHE12NY0CQ9FH description: InvoiceUsageBasedLineCreateWithCustomer represents the create model for an invoice line that is sold to the customer based on usage. InvoiceWorkflowInvoicingSettingsReplaceUpdate: type: object @@ -12589,14 +12595,14 @@ components: draftPeriod: type: string format: ISO8601 - example: P1D description: The period for the invoice to be kept in draft status for manual reviews. + example: P1D default: P1D dueAfter: type: string format: ISO8601 - example: P1D description: The period after which the invoice is due. + example: P1D default: P7D defaultTaxConfig: allOf: @@ -12632,13 +12638,13 @@ components: readOnly: true sourceBillingProfileId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: |- sourceBillingProfileID is the billing profile on which the workflow was based on. The profile is snapshotted on invoice creation, after which it can be altered independently of the profile itself. + example: 01G65Z755AFWAKHE12NY0CQ9FH readOnly: true workflow: allOf: @@ -12719,6 +12725,11 @@ components: items: $ref: '#/components/schemas/AppCapability' description: The app's capabilities. + description: |- + A marketplace listing. + Represent an available app in the app marketplace that can be installed to the organization. + + Marketplace apps only exist in config so they don't extend the Resource model. example: type: stripe name: Stripe @@ -12736,11 +12747,6 @@ components: key: stripe_collect_payments name: Collect Payments description: Stripe payments collects outstanding revenue with Stripe customer's default payment method. - description: |- - A marketplace listing. - Represent an available app in the app marketplace that can be installed to the organization. - - Marketplace apps only exist in config so they don't extend the Resource model. MarketplaceListingList: type: object required: @@ -12784,17 +12790,17 @@ components: MeasureUsageFromTime: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T01:01:01.001Z' Metadata: type: object additionalProperties: type: string - example: - externalId: 019142cc-a016-796a-8113-1a942fecd26d description: |- Set of key-value pairs. Metadata can be used to store additional information about a resource. + example: + externalId: 019142cc-a016-796a-8113-1a942fecd26d x-go-type: map[string]string Meter: type: object @@ -12807,9 +12813,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the meter. + example: 01G65Z755AFWAKHE12NY0CQ9FH readOnly: true slug: type: string @@ -12822,9 +12828,9 @@ components: example: tokens_total description: type: string - example: AI Token Usage minLength: 1 description: A description of the meter. + example: AI Token Usage aggregation: allOf: - $ref: '#/components/schemas/MeterAggregation' @@ -12835,12 +12841,11 @@ components: example: MINUTE eventType: type: string - example: prompt minLength: 1 description: The event type to aggregate. + example: prompt valueProperty: type: string - example: $.tokens minLength: 1 description: |- JSONPath expression to extract the value from the ingested event's data property. @@ -12848,18 +12853,20 @@ components: 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 valueProperty is ignored. + example: $.tokens groupBy: type: object additionalProperties: type: string - example: - type: $.type description: |- 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 + example: + type: $.type + description: A meter is a configuration that defines how to match and aggregate events. example: id: 01G65Z755AFWAKHE12NY0CQ9FH slug: tokens_total @@ -12871,7 +12878,6 @@ components: groupBy: model: $.model type: $.type - description: A meter is a configuration that defines how to match and aggregate events. x-go-type-import: path: github.com/openmeterio/openmeter/pkg/models x-go-type: models.Meter @@ -12907,9 +12913,9 @@ components: example: tokens_total description: type: string - example: AI Token Usage minLength: 1 description: A description of the meter. + example: AI Token Usage aggregation: allOf: - $ref: '#/components/schemas/MeterAggregation' @@ -12920,12 +12926,11 @@ components: example: MINUTE eventType: type: string - example: prompt minLength: 1 description: The event type to aggregate. + example: prompt valueProperty: type: string - example: $.tokens minLength: 1 description: |- JSONPath expression to extract the value from the ingested event's data property. @@ -12933,18 +12938,20 @@ components: 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 valueProperty is ignored. + example: $.tokens groupBy: type: object additionalProperties: type: string - example: - type: $.type description: |- 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 + example: + type: $.type + description: A meter is a configuration that defines how to match and aggregate events. example: slug: tokens_total description: AI Token Usage @@ -12955,7 +12962,6 @@ components: groupBy: model: $.model type: $.type - description: A meter is a configuration that defines how to match and aggregate events. x-go-type-import: path: github.com/openmeterio/openmeter/pkg/models x-go-type: models.Meter @@ -12967,32 +12973,32 @@ components: from: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T01:01:01.001Z' to: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T01:01:01.001Z' windowSize: $ref: '#/components/schemas/WindowSize' data: type: array items: $ref: '#/components/schemas/MeterQueryRow' + description: The result of a meter query. example: - from: 2023-01-01T00:00:00Z - to: 2023-01-02T00:00:00Z + from: '2023-01-01T00:00:00Z' + to: '2023-01-02T00:00:00Z' windowSize: DAY data: - value: 12 - windowStart: 2023-01-01T00:00:00Z - windowEnd: 2023-01-02T00:00:00Z + windowStart: '2023-01-01T00:00:00Z' + windowEnd: '2023-01-02T00:00:00Z' subject: customer-1 groupBy: model: gpt-4-turbo type: prompt - description: The result of a meter query. MeterQueryRow: type: object required: @@ -13005,28 +13011,28 @@ components: windowStart: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T01:01:01.001Z' windowEnd: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T01:01:01.001Z' subject: type: string groupBy: type: object additionalProperties: type: string + description: A row in the result of a meter query. example: value: 12 - windowStart: 2023-01-01T00:00:00Z - windowEnd: 2023-01-02T00:00:00Z + windowStart: '2023-01-01T00:00:00Z' + windowEnd: '2023-01-02T00:00:00Z' subject: customer-1 groupBy: model: gpt-4-turbo type: prompt - description: A row in the result of a meter query. x-go-type-import: path: github.com/openmeterio/openmeter/pkg/models x-go-type: models.MeterQueryRow @@ -13058,9 +13064,9 @@ components: properties: id: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: Identifies the notification channel. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV title: Channel Unique Identifier readOnly: true type: @@ -13088,16 +13094,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -13124,29 +13130,29 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true id: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: Identifies the notification channel. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV title: Channel Unique Identifier readOnly: true type: @@ -13157,20 +13163,20 @@ components: title: Channel Type name: type: string - example: customer-webhook description: User friendly name of the channel. title: Channel Name + example: customer-webhook disabled: type: boolean - example: true description: Whether the channel is disabled or not. title: Channel Disabled + example: true default: false url: type: string - example: https://example.com/webhook description: Webhook URL where the notification is sent. title: Webhook URL + example: https://example.com/webhook customHeaders: type: object additionalProperties: @@ -13179,13 +13185,13 @@ components: title: Custom HTTP Headers signingSecret: type: string - example: whsec_S6g2HLnTwd9AhHwUIMFggVS9OfoPafN8 pattern: ^(whsec_)?[a-zA-Z0-9+/=]{32,100}$ description: |- Signing secret used for webhook request validation on the receiving end. Format: `base64` encoded random bytes optionally prefixed with `whsec_`. Recommended size: 24 title: Signing Secret + example: whsec_S6g2HLnTwd9AhHwUIMFggVS9OfoPafN8 description: Notification channel with webhook type. NotificationChannelWebhookCreateRequest: type: object @@ -13202,20 +13208,20 @@ components: title: Channel Type name: type: string - example: customer-webhook description: User friendly name of the channel. title: Channel Name + example: customer-webhook disabled: type: boolean - example: true description: Whether the channel is disabled or not. title: Channel Disabled + example: true default: false url: type: string - example: https://example.com/webhook description: Webhook URL where the notification is sent. title: Webhook URL + example: https://example.com/webhook customHeaders: type: object additionalProperties: @@ -13224,13 +13230,13 @@ components: title: Custom HTTP Headers signingSecret: type: string - example: whsec_S6g2HLnTwd9AhHwUIMFggVS9OfoPafN8 pattern: ^(whsec_)?[a-zA-Z0-9+/=]{32,100}$ description: |- Signing secret used for webhook request validation on the receiving end. Format: `base64` encoded random bytes optionally prefixed with `whsec_`. Recommended size: 24 title: Signing Secret + example: whsec_S6g2HLnTwd9AhHwUIMFggVS9OfoPafN8 description: Request with input parameters for creating new notification channel with webhook type. NotificationEvent: type: object @@ -13244,9 +13250,9 @@ components: properties: id: type: string - example: 01J2KNP1YTXQRXHTDJ4KPR7PZ0 pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier of the notification event. + example: 01J2KNP1YTXQRXHTDJ4KPR7PZ0 title: Event Identifier readOnly: true type: @@ -13258,8 +13264,8 @@ components: createdAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: Timestamp when the notification event was created in RFC 3339 format. + example: '2023-01-01T01:01:01.001Z' title: Creation Time readOnly: true rule: @@ -13296,9 +13302,9 @@ components: properties: id: type: string - example: 01J2KNP1YTXQRXHTDJ4KPR7PZ0 pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the notification event the payload belongs to. + example: 01J2KNP1YTXQRXHTDJ4KPR7PZ0 title: Notification Event Identifier readOnly: true type: @@ -13311,8 +13317,8 @@ components: timestamp: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: Timestamp when the notification event was created in RFC 3339 format. + example: '2023-01-01T01:01:01.001Z' title: Creation Time readOnly: true data: @@ -13368,20 +13374,20 @@ components: state: allOf: - $ref: '#/components/schemas/NotificationEventDeliveryStatusState' - example: SUCCESS description: Delivery state of the notification event to the channel. + example: SUCCESS readOnly: true reason: type: string - example: Failed to dispatch event due to provider error. description: The reason of the last deliverry state update. title: State Reason + example: Failed to dispatch event due to provider error. readOnly: true updatedAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: Timestamp of when the status was last updated in RFC 3339 format. + example: '2023-01-01T01:01:01.001Z' title: Last Update Time readOnly: true channel: @@ -13421,16 +13427,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -13466,29 +13472,29 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true id: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: Identifies the notification rule. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV title: Rule Unique Identifier readOnly: true type: @@ -13499,14 +13505,14 @@ components: title: Rule Type name: type: string - example: Balance threshold reached description: The user friendly name of the notification rule. title: Rule Name + example: Balance threshold reached disabled: type: boolean - example: true description: Whether the rule is disabled or not. title: Rule Disabled + example: true default: false channels: type: array @@ -13546,14 +13552,14 @@ components: title: Rule Type name: type: string - example: Balance threshold reached description: The user friendly name of the notification rule. title: Rule Name + example: Balance threshold reached disabled: type: boolean - example: true description: Whether the rule is disabled or not. title: Rule Disabled + example: true default: false thresholds: type: array @@ -13567,9 +13573,9 @@ components: type: array items: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH minItems: 1 description: List of notification channels the rule is applied to. title: Channels @@ -13598,14 +13604,14 @@ components: value: type: number format: double - example: 100 description: Value of the threshold. title: Threshold Value + example: 100 type: allOf: - $ref: '#/components/schemas/NotificationRuleBalanceThresholdValueType' - example: NUMBER description: Type of the threshold. + example: NUMBER description: Threshold value with multiple supported types. NotificationRuleBalanceThresholdValueType: type: string @@ -13640,16 +13646,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -13680,8 +13686,8 @@ components: dueAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: When the payment is due. + example: '2023-01-01T01:01:01.001Z' readOnly: true notes: type: string @@ -13767,13 +13773,13 @@ components: from: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: Period start time. + example: '2023-01-01T01:01:01.001Z' to: type: string format: date-time - example: 2023-02-01T01:01:01.001Z description: Period end time. + example: '2023-02-01T01:01:01.001Z' description: A period with a start and end time. Plan: type: object @@ -13790,9 +13796,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true name: @@ -13816,22 +13822,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true key: @@ -13857,15 +13863,15 @@ components: effectiveFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The date and time when the plan becomes effective. When not specified, the plan is a draft. + example: '2023-01-01T01:01:01.001Z' title: Effective start date readOnly: true effectiveTo: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The date and time when the plan is no longer effective. When not specified, the plan is effective indefinitely. + example: '2023-01-01T01:01:01.001Z' title: Effective end date readOnly: true status: @@ -13958,16 +13964,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -14011,9 +14017,9 @@ components: type: string format: duration nullable: true - example: P1Y description: The duration of the phase. title: Duration + example: P1Y rateCards: type: array items: @@ -14036,9 +14042,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The plan ID. + example: 01G65Z755AFWAKHE12NY0CQ9FH key: type: string minLength: 1 @@ -14120,8 +14126,8 @@ components: activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T01:01:01.001Z' name: type: string description: @@ -14142,17 +14148,17 @@ components: activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T01:01:01.001Z' name: type: string description: type: string customerId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH description: Create subscription based on plan. PortalToken: type: object @@ -14161,9 +14167,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH readOnly: true subject: type: string @@ -14171,8 +14177,8 @@ components: expiresAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T01:01:01.001Z' readOnly: true expired: type: boolean @@ -14180,21 +14186,21 @@ components: createdAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T01:01:01.001Z' readOnly: true token: type: string - example: om_portal_IAnD3PpWW2A2Wr8m9jfzeHlGX8xmCXwG.y5q4S-AWqFu6qjfaFz0zQq4Ez28RsnyVwJffX5qxMvo description: The token is only returned at creation. + example: om_portal_IAnD3PpWW2A2Wr8m9jfzeHlGX8xmCXwG.y5q4S-AWqFu6qjfaFz0zQq4Ez28RsnyVwJffX5qxMvo readOnly: true allowedMeterSlugs: type: array items: type: string + description: Optional, if defined only the specified meters will be allowed. example: - tokens_total - description: Optional, if defined only the specified meters will be allowed. description: |- A consumer portal token. @@ -14354,11 +14360,14 @@ components: allOf: - $ref: '#/components/schemas/FlatPriceWithPaymentTerm' nullable: true - example: {} description: |- The price of the rate card. When null, the feature or service is free. title: Price + example: + type: flat + amount: '100' + paymentTerm: in_arrears description: A flat fee rate card defines a one-time purchase or a recurring fee. RateCardMeteredEntitlement: type: object @@ -14426,8 +14435,8 @@ components: config: type: string format: json - example: '{ "integrations": ["github"] }' description: The JSON parsable config of the entitlement. This value is also returned when checking entitlement access and it is useful for configuring fine-grained access settings to the feature, implemented in your own system. Has to be an object. + example: '{ "integrations": ["github"] }' description: Entitlement template of a static entitlement. RateCardUsageBased: type: object @@ -14533,14 +14542,14 @@ components: anchor: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: A date-time anchor to base the recurring period on. + example: '2023-01-01T01:01:01.001Z' title: Anchor time + description: Recurring period with an interval and an anchor. example: interval: DAY intervalISO: P1D - anchor: 2023-01-01T01:01:01.001Z - description: Recurring period with an interval and an anchor. + anchor: '2023-01-01T01:01:01.001Z' RecurringPeriodCreateInput: type: object required: @@ -14554,13 +14563,13 @@ components: anchor: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: A date-time anchor to base the recurring period on. + example: '2023-01-01T01:01:01.001Z' title: Anchor time + description: Recurring period with an interval and an anchor. example: interval: DAY - anchor: 2023-01-01T01:01:01.001Z - description: Recurring period with an interval and an anchor. + anchor: '2023-01-01T01:01:01.001Z' RecurringPeriodInterval: anyOf: - type: string @@ -14589,8 +14598,8 @@ components: effectiveAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time at which the reset takes effect, defaults to now. The reset cannot be in the future. The provided value is truncated to the minute due to how historical meter data is stored. + example: '2023-01-01T01:01:01.001Z' retainAnchor: type: boolean description: |- @@ -14618,9 +14627,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true name: @@ -14644,22 +14653,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true listing: @@ -14699,11 +14708,11 @@ components: readOnly: true id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: |- The app ID. If not provided, it will use the global default for the app type. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: App ID type: type: string @@ -14750,9 +14759,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true name: @@ -14776,22 +14785,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true listing: @@ -14825,6 +14834,7 @@ components: description: |- The masked API key. Only shows the first 8 and last 3 characters. + description: A installed Stripe app object. example: id: 01G65Z755AFWAKHE12NY0CQ9FH type: stripe @@ -14848,12 +14858,11 @@ components: key: stripe_collect_payments name: Collect Payments description: Stripe payments collects outstanding revenue with Stripe customer's default payment method. - createdAt: 2024-01-01T01:01:01.001Z - updatedAt: 2024-01-01T01:01:01.001Z + createdAt: '2024-01-01T01:01:01.001Z' + updatedAt: '2024-01-01T01:01:01.001Z' stripeAccountId: acct_123456789 livemode: true maskedAPIKey: sk_live_************abc - description: A installed Stripe app object. StripeCheckoutSessionMode: type: string enum: @@ -14867,11 +14876,11 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: |- The app ID. If not provided, it will use the global default for the app type. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: App ID type: type: string @@ -14890,10 +14899,10 @@ components: stripeDefaultPaymentMethodId: type: string description: The Stripe default payment method ID. + description: Stripe Customer App Data. example: type: stripe stripeCustomerId: cus_xxxxxxxxxxxxxx - description: Stripe Customer App Data. StripePaymentIntentStatus: type: string enum: @@ -14943,13 +14952,13 @@ components: properties: code: type: string - example: txcd_10000000 pattern: ^txcd_\d{8}$ description: |- Product tax code. See: https://docs.stripe.com/tax/tax-codes title: Tax code + example: txcd_10000000 description: The tax config for Stripe. StripeWebhookEvent: type: object @@ -14990,19 +14999,19 @@ components: properties: namespaceId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH appId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH customerId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH description: Stripe webhook response. Subject: type: object @@ -15012,48 +15021,49 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the subject. + example: 01G65Z755AFWAKHE12NY0CQ9FH readOnly: true key: type: string - example: customer-id description: A unique, human-readable identifier for the subject. + example: customer-id displayName: type: string nullable: true - example: Customer Name description: A human-readable display name for the subject. + example: Customer Name metadata: type: object additionalProperties: {} nullable: true - example: {} + example: + hubspotId: '123456' currentPeriodStart: type: string format: date-time - example: 2023-01-01T00:00:00Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T00:00:00Z' currentPeriodEnd: type: string format: date-time - example: 2023-02-01T00:00:00Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-02-01T00:00:00Z' stripeCustomerId: type: string nullable: true example: cus_JMOlctsKV8 + description: A subject is a unique identifier for a user or entity. example: id: 01G65Z755AFWAKHE12NY0CQ9FH key: customer-id displayName: Customer Name metadata: hubspotId: '123456' - currentPeriodStart: 2023-01-01T00:00:00Z - currentPeriodEnd: 2023-02-01T00:00:00Z + currentPeriodStart: '2023-01-01T00:00:00Z' + currentPeriodEnd: '2023-02-01T00:00:00Z' stripeCustomerId: cus_JMOlctsKV8 - description: A subject is a unique identifier for a user or entity. SubjectUpsert: type: object required: @@ -15061,41 +15071,42 @@ components: properties: key: type: string - example: customer-id description: A unique, human-readable identifier for the subject. + example: customer-id displayName: type: string nullable: true - example: Customer Name description: A human-readable display name for the subject. + example: Customer Name metadata: type: object additionalProperties: {} nullable: true - example: {} + example: + hubspotId: '123456' currentPeriodStart: type: string format: date-time - example: 2023-01-01T00:00:00Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T00:00:00Z' currentPeriodEnd: type: string format: date-time - example: 2023-02-01T00:00:00Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-02-01T00:00:00Z' stripeCustomerId: type: string nullable: true example: cus_JMOlctsKV8 + description: A subject is a unique identifier for a user or entity. example: key: customer-id displayName: Customer Name metadata: hubspotId: '123456' - currentPeriodStart: 2023-01-01T00:00:00Z - currentPeriodEnd: 2023-02-01T00:00:00Z + currentPeriodStart: '2023-01-01T00:00:00Z' + currentPeriodEnd: '2023-02-01T00:00:00Z' stripeCustomerId: cus_JMOlctsKV8 - description: A subject is a unique identifier for a user or entity. Subscription: type: object required: @@ -15110,9 +15121,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true name: @@ -15136,34 +15147,34 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence start of the resource. + example: '2023-01-01T01:01:01.001Z' activeTo: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence end of the resource. + example: '2023-01-01T01:01:01.001Z' status: allOf: - $ref: '#/components/schemas/SubscriptionStatus' @@ -15171,9 +15182,9 @@ components: readOnly: true customerId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The customer ID of the subscription. + example: 01G65Z755AFWAKHE12NY0CQ9FH plan: allOf: - $ref: '#/components/schemas/PlanReference' @@ -15256,9 +15267,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true name: @@ -15282,34 +15293,34 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence start of the resource. + example: '2023-01-01T01:01:01.001Z' activeTo: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence end of the resource. + example: '2023-01-01T01:01:01.001Z' status: allOf: - $ref: '#/components/schemas/SubscriptionStatus' @@ -15317,9 +15328,9 @@ components: readOnly: true customerId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The customer ID of the subscription. + example: 01G65Z755AFWAKHE12NY0CQ9FH plan: allOf: - $ref: '#/components/schemas/PlanReference' @@ -15351,9 +15362,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true name: @@ -15377,34 +15388,34 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence start of the resource. + example: '2023-01-01T01:01:01.001Z' activeTo: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence end of the resource. + example: '2023-01-01T01:01:01.001Z' key: type: string minLength: 1 @@ -15449,11 +15460,14 @@ components: allOf: - $ref: '#/components/schemas/TieredPriceWithCommitments' nullable: true - example: {} description: |- The price of the rate card. When null, the feature or service is free. title: Price + example: + type: flat + amount: '100' + paymentTerm: in_arrears included: allOf: - $ref: '#/components/schemas/SubscriptionItemIncluded' @@ -15491,19 +15505,19 @@ components: type: string format: duration nullable: true - example: P1Y description: |- Interval after the subscription starts to transition to the phase. When null, the phase starts immediately after the subscription starts. title: Start after + example: P1Y duration: type: string format: duration - example: P1M description: |- The intended duration of the new phase. Duration is required when the phase will not be the last phase. title: Duration + example: P1M discounts: type: array items: @@ -15536,9 +15550,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true name: @@ -15562,22 +15576,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true key: @@ -15595,13 +15609,13 @@ components: activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time from which the phase is active. + example: '2023-01-01T01:01:01.001Z' activeTo: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The until which the Phase is active. + example: '2023-01-01T01:01:01.001Z' items: type: array items: @@ -15731,29 +15745,29 @@ components: type: type: string format: uri - example: about:blank description: Type contains a URI that identifies the problem type. + example: about:blank default: about:blank title: type: string - example: Bad Request description: A a short, human-readable summary of the problem type. + example: Bad Request status: type: integer format: int16 - example: 400 minimum: 400 maximum: 599 description: The HTTP status code generated by the origin server for this occurrence of the problem. + example: 400 detail: type: string - example: The request body must be a JSON object. description: A human-readable explanation specific to this occurrence of the problem. + example: The request body must be a JSON object. instance: type: string format: uri - example: urn:request:local/JMOlctsKV8-000001 description: A URI reference that identifies the specific occurrence of the problem. + example: urn:request:local/JMOlctsKV8-000001 additionalProperties: anyOf: - type: string @@ -15819,29 +15833,29 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ID of the charge or discount. + example: 01G65Z755AFWAKHE12NY0CQ9FH readOnly: true severity: allOf: @@ -15943,9 +15957,9 @@ components: properties: lineId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The line item ID to override. + example: 01G65Z755AFWAKHE12NY0CQ9FH action: allOf: - $ref: '#/components/schemas/VoidInvoiceActionCreateItem' @@ -15995,11 +16009,11 @@ components: nextInvoiceAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: |- The time at which the line item should be invoiced again. If not provided, the line item will be re-invoiced now. + example: '2023-01-01T01:01:01.001Z' description: VoidInvoiceLinePendingAction describes how to handle the voidied line item in the invoice. VoidInvoiceLinePendingActionCreateItem: type: object @@ -16014,11 +16028,11 @@ components: nextInvoiceAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: |- The time at which the line item should be invoiced again. If not provided, the line item will be re-invoiced now. + example: '2023-01-01T01:01:01.001Z' description: VoidInvoiceLinePendingAction describes how to handle the voidied line item in the invoice. WindowSize: type: string diff --git a/api/openapi.yaml b/api/openapi.yaml index 9204ed3e8..08169edb4 100644 --- a/api/openapi.yaml +++ b/api/openapi.yaml @@ -100,8 +100,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -163,8 +163,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -232,8 +232,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '204': description: 'There is no content to send for this request, but the headers may be useful. ' @@ -292,8 +292,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '204': description: 'There is no content to send for this request, but the headers may be useful. ' @@ -352,8 +352,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -426,9 +426,9 @@ paths: type: array items: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH - $ref: '#/components/parameters/Pagination.page' - $ref: '#/components/parameters/Pagination.pageSize' - $ref: '#/components/parameters/LimitOffset.offset' @@ -491,8 +491,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -568,8 +568,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -631,8 +631,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '204': description: 'There is no content to send for this request, but the headers may be useful. ' @@ -696,8 +696,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -961,8 +961,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH - name: expand in: query required: false @@ -1043,8 +1043,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '204': description: 'There is no content to send for this request, but the headers may be useful. ' @@ -1105,8 +1105,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -1180,8 +1180,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -1251,8 +1251,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -1318,8 +1318,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -1385,8 +1385,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -1454,8 +1454,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -1655,8 +1655,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '204': description: 'There is no content to send for this request, but the headers may be useful. ' @@ -1714,8 +1714,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH - name: expand in: query required: false @@ -1784,8 +1784,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -1971,8 +1971,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH - $ref: '#/components/parameters/PaginatedQuery.page' - $ref: '#/components/parameters/PaginatedQuery.pageSize' - $ref: '#/components/parameters/queryCustomerList.type' @@ -2037,8 +2037,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -2111,15 +2111,15 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH - name: appId in: path required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '204': description: 'There is no content to send for this request, but the headers may be useful. ' @@ -2189,7 +2189,7 @@ paths: schema: type: string format: date-time - example: 2023-01-01T01:01:01.001Z + example: '2023-01-01T01:01:01.001Z' responses: '200': description: The request has succeeded. @@ -2252,8 +2252,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -2315,8 +2315,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -2384,8 +2384,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '204': description: 'There is no content to send for this request, but the headers may be useful. ' @@ -2599,8 +2599,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -4011,8 +4011,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -4080,8 +4080,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -4146,8 +4146,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '204': description: 'There is no content to send for this request, but the headers may be useful. ' @@ -4210,7 +4210,7 @@ paths: schema: type: string format: date-time - example: 2023-01-01T01:01:01.001Z + example: '2023-01-01T01:01:01.001Z' - name: to in: query required: false @@ -4220,7 +4220,7 @@ paths: schema: type: string format: date-time - example: 2023-01-01T01:01:01.001Z + example: '2023-01-01T01:01:01.001Z' - name: feature in: query required: false @@ -4254,9 +4254,9 @@ paths: type: array items: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH - name: channel in: query required: false @@ -4268,9 +4268,9 @@ paths: type: array items: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH - $ref: '#/components/parameters/Pagination.page' - $ref: '#/components/parameters/Pagination.pageSize' - $ref: '#/components/parameters/NotificationEventOrderByOrdering.order' @@ -4556,8 +4556,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -4625,8 +4625,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -4691,8 +4691,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '204': description: 'There is no content to send for this request, but the headers may be useful. ' @@ -4751,8 +4751,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '201': description: The request has succeeded and a new resource has been created as a result. @@ -4883,9 +4883,9 @@ paths: type: array items: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH - name: key in: query required: false @@ -5028,9 +5028,9 @@ paths: schema: anyOf: - type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH - type: string minLength: 1 maxLength: 64 @@ -5100,8 +5100,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -5170,9 +5170,9 @@ paths: schema: anyOf: - type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH - type: string minLength: 1 maxLength: 64 @@ -5255,8 +5255,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '204': description: 'There is no content to send for this request, but the headers may be useful. ' @@ -5315,8 +5315,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -5379,8 +5379,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -6097,7 +6097,7 @@ paths: schema: type: string format: date-time - example: 2023-01-01T01:01:01.001Z + example: '2023-01-01T01:01:01.001Z' responses: '200': description: The request has succeeded. @@ -6308,7 +6308,7 @@ paths: schema: type: string format: date-time - example: 2023-01-01T01:01:01.001Z + example: '2023-01-01T01:01:01.001Z' - name: to in: query required: false @@ -6318,7 +6318,7 @@ paths: schema: type: string format: date-time - example: 2023-01-01T01:01:01.001Z + example: '2023-01-01T01:01:01.001Z' - name: windowSize in: query required: true @@ -6529,8 +6529,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH - name: at in: query required: false @@ -6538,7 +6538,7 @@ paths: schema: type: string format: date-time - example: 2023-01-01T01:01:01.001Z + example: '2023-01-01T01:01:01.001Z' responses: '200': description: The request has succeeded. @@ -6602,8 +6602,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -6678,8 +6678,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -6747,8 +6747,8 @@ paths: effectiveDate: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: If not provided the subscription is canceled immediately. + example: '2023-01-01T01:01:01.001Z' /api/v1/subscriptions/{subscriptionId}/change: post: operationId: changeSubscription @@ -6762,8 +6762,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -6838,8 +6838,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -6918,8 +6918,8 @@ paths: required: true schema: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + example: 01G65Z755AFWAKHE12NY0CQ9FH responses: '200': description: The request has succeeded. @@ -7090,9 +7090,9 @@ components: type: array items: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH InvoiceListParams.expand: name: expand in: query @@ -7127,7 +7127,7 @@ components: schema: type: string format: date-time - example: 2023-01-01T01:01:01.001Z + example: '2023-01-01T01:01:01.001Z' InvoiceListParams.issuedBefore: name: issuedBefore in: query @@ -7136,7 +7136,7 @@ components: schema: type: string format: date-time - example: 2023-01-01T01:01:01.001Z + example: '2023-01-01T01:01:01.001Z' InvoiceListParams.statuses: name: statuses in: query @@ -7225,7 +7225,7 @@ components: schema: type: string format: date-time - example: 2023-01-01T01:01:01.001Z + example: '2023-01-01T01:01:01.001Z' MeterQuery.groupBy: name: groupBy in: query @@ -7257,7 +7257,7 @@ components: schema: type: string format: date-time - example: 2023-01-01T01:01:01.001Z + example: '2023-01-01T01:01:01.001Z' MeterQuery.windowSize: name: windowSize in: query @@ -7539,9 +7539,9 @@ components: Annotations: type: object additionalProperties: {} + description: Set of key-value pairs managed by the system. Cannot be modified by user. example: externalId: 019142cc-a016-796a-8113-1a942fecd26d - description: Set of key-value pairs managed by the system. Cannot be modified by user. App: anyOf: - $ref: '#/components/schemas/StripeApp' @@ -7567,9 +7567,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true name: @@ -7593,22 +7593,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true listing: @@ -7685,15 +7685,15 @@ components: description: type: string description: The capability description. + description: |- + App capability. + + Capabilities only exist in config so they don't extend the Resource model. example: type: collectPayments key: stripe_collect_payment name: Collect Payments description: Stripe payments collects outstanding revenue with Stripe customer's default payment method. - description: |- - App capability. - - Capabilities only exist in config so they don't extend the Resource model. AppCapabilityType: type: string enum: @@ -7736,9 +7736,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The ID of the app. + example: 01G65Z755AFWAKHE12NY0CQ9FH description: |- App reference @@ -7772,14 +7772,14 @@ components: usage: type: number format: double - example: 100 description: The total usage of the feature in the period. + example: 100 readOnly: true balanceAtStart: type: number format: double - example: 100 description: The entitlement balance at the start of the period. + example: 100 readOnly: true description: The balance history window. BillingCollectionAlignment: @@ -7801,29 +7801,29 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ID of the charge or discount. + example: 01G65Z755AFWAKHE12NY0CQ9FH readOnly: true percent: allOf: @@ -7904,9 +7904,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true name: @@ -7930,22 +7930,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true supplier: @@ -8025,27 +8025,27 @@ components: tax: anyOf: - type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH - type: string description: The tax app used for this workflow x-go-type: string invoicing: anyOf: - type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH - type: string description: The invoicing app used for this workflow x-go-type: string payment: anyOf: - type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH - type: string description: The payment app used for this workflow x-go-type: string @@ -8109,22 +8109,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true workflow: @@ -8133,12 +8133,12 @@ components: description: The details of the overrides active for this specific customer. billingProfile: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: |- The billing profile this override is associated with. If not provided, the default billing profile is chosen if available. + example: 01G65Z755AFWAKHE12NY0CQ9FH description: Customer specific workflow overrides. BillingProfileCustomerOverrideCreate: type: object @@ -8149,12 +8149,12 @@ components: description: The details of the overrides active for this specific customer. billingProfile: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: |- The billing profile this override is associated with. If not provided, the default billing profile is chosen if available. + example: 01G65Z755AFWAKHE12NY0CQ9FH description: Payload for creating a new or updating an existing customer override. BillingProfileCustomerOverrideOrderBy: type: string @@ -8171,16 +8171,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -8265,16 +8265,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -8385,12 +8385,12 @@ components: interval: type: string format: ISO8601 - example: P1D description: |- 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. + example: P1D default: PT1H description: Workflow collection specifies how to collect the pending line items for an invoice BillingWorkflowCreate: @@ -8419,14 +8419,14 @@ components: draftPeriod: type: string format: ISO8601 - example: P1D description: The period for the invoice to be kept in draft status for manual reviews. + example: P1D default: P1D dueAfter: type: string format: ISO8601 - example: P1D description: The period after which the invoice is due. + example: P1D default: P7D progressiveBilling: type: boolean @@ -8511,13 +8511,13 @@ components: description: The request could not be completed due to a conflict with the current state of the target resource. CountryCode: type: string - example: US minLength: 2 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. + example: US CreateCheckoutSessionTaxIdCollection: type: object required: @@ -8636,9 +8636,9 @@ components: properties: appId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: If not provided, the default Stripe app is used if any. + example: 01G65Z755AFWAKHE12NY0CQ9FH customer: anyOf: - $ref: '#/components/schemas/CustomerId' @@ -8657,6 +8657,7 @@ components: allOf: - $ref: '#/components/schemas/CreateStripeCheckoutSessionRequestOptions' description: Options passed to Stripe when creating the checkout session. + description: Create Stripe checkout session request. example: customer: name: ACME, Inc. @@ -8674,7 +8675,6 @@ components: customerUpdate: name: auto address: auto - description: Create Stripe checkout session request. CreateStripeCheckoutSessionRequestOptions: type: object properties: @@ -8766,9 +8766,9 @@ components: properties: customerId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The OpenMeter customer ID. + example: 01G65Z755AFWAKHE12NY0CQ9FH stripeCustomerId: type: string description: The Stripe customer ID. @@ -8811,8 +8811,8 @@ components: issuedAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: IssueAt reflects the time the document was issued. + example: '2023-01-01T01:01:01.001Z' readOnly: true number: allOf: @@ -8852,13 +8852,13 @@ components: description: Currency describes a currency supported by OpenMeter. CurrencyCode: type: string - example: USD minLength: 3 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. + example: USD CustomPlanInput: type: object allOf: @@ -8912,8 +8912,8 @@ components: activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T01:01:01.001Z' customPlan: $ref: '#/components/schemas/CustomPlanInput' description: Change a custom subscription. @@ -8927,15 +8927,15 @@ components: activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T01:01:01.001Z' customPlan: $ref: '#/components/schemas/CustomPlanInput' customerId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH description: Create a custom subscription. Customer: type: object @@ -8948,9 +8948,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true name: @@ -8974,22 +8974,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true key: @@ -9024,20 +9024,20 @@ components: title: Billing Address currentSubscriptionId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The ID of the Subscription if the customer has one. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: Current Subscription ID readOnly: true + description: A customer object. example: id: 01G65Z755AFWAKHE12NY0CQ9FH name: ACME Inc. usageAttribution: subjectKeys: - my_subject_key - createdAt: 2024-01-01T01:01:01.001Z - updatedAt: 2024-01-01T01:01:01.001Z - description: A customer object. + createdAt: '2024-01-01T01:01:01.001Z' + updatedAt: '2024-01-01T01:01:01.001Z' CustomerAppData: anyOf: - $ref: '#/components/schemas/StripeCustomerAppData' @@ -9061,16 +9061,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -9139,9 +9139,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH description: Create Stripe checkout session with customer ID. CustomerKey: type: object @@ -9168,16 +9168,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -9414,22 +9414,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true metadata: @@ -9439,18 +9439,18 @@ components: activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence start of the resource. + example: '2023-01-01T01:01:01.001Z' activeTo: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence end of the resource. + example: '2023-01-01T01:01:01.001Z' id: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: Readonly unique ULID identifier. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV readOnly: true type: allOf: @@ -9473,9 +9473,9 @@ components: example: example-feature-key featureId: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The feature the subject is entitled to use. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV currentUsagePeriod: allOf: - $ref: '#/components/schemas/Period' @@ -9504,22 +9504,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true metadata: @@ -9529,18 +9529,18 @@ components: activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence start of the resource. + example: '2023-01-01T01:01:01.001Z' activeTo: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence end of the resource. + example: '2023-01-01T01:01:01.001Z' id: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: Readonly unique ULID identifier. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV readOnly: true subjectKey: type: string @@ -9558,9 +9558,9 @@ components: example: example-feature-key featureId: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The feature the subject is entitled to use. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV currentUsagePeriod: allOf: - $ref: '#/components/schemas/Period' @@ -9588,11 +9588,11 @@ components: example: example-feature-key featureId: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: |- The feature the subject is entitled to use. Either featureKey or featureId is required. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV metadata: allOf: - $ref: '#/components/schemas/Metadata' @@ -9632,11 +9632,11 @@ components: example: example-feature-key featureId: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: |- The feature the subject is entitled to use. Either featureKey or featureId is required. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV metadata: allOf: - $ref: '#/components/schemas/Metadata' @@ -9660,34 +9660,33 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true amount: type: number format: double - example: 100 minimum: 0 description: The amount to grant. Should be a positive number. + example: 100 priority: type: integer format: uint8 - example: 1 minimum: 1 maximum: 255 description: |- @@ -9697,11 +9696,12 @@ components: When there are several grants available for the same subject, the system selects the grant with the highest priority. In cases where grants share the same priority level, the grant closest to its expiration will be used first. In the case of two grants have identical priorities and expiration dates, the system will use the grant that was created first. + example: 1 effectiveAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: Effective date for grants and anchor for recurring grants. Provided value will be ceiled to metering windowSize (minute). + example: '2023-01-01T01:01:01.001Z' expiration: allOf: - $ref: '#/components/schemas/ExpirationPeriod' @@ -9709,52 +9709,52 @@ components: maxRolloverAmount: type: number format: double - example: 100 description: |- Grants are rolled over at reset, after which they can have a different balance compared to what they had before the reset. Balance after the reset is calculated as: Balance_After_Reset = MIN(MaxRolloverAmount, MAX(Balance_Before_Reset, MinRolloverAmount)) + example: 100 default: 0 minRolloverAmount: type: number format: double - example: 100 description: |- Grants are rolled over at reset, after which they can have a different balance compared to what they had before the reset. Balance after the reset is calculated as: Balance_After_Reset = MIN(MaxRolloverAmount, MAX(Balance_Before_Reset, MinRolloverAmount)) + example: 100 default: 0 metadata: allOf: - $ref: '#/components/schemas/Metadata' + description: The grant metadata. example: stripePaymentId: pi_4OrAkhLvyihio9p51h9iiFnB - description: The grant metadata. id: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: Readonly unique ULID identifier. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV readOnly: true entitlementId: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV description: The unique entitlement ULID that the grant is associated with. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV readOnly: true nextRecurrence: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The next time the grant will recurr. + example: '2023-01-01T01:01:01.001Z' expiresAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time the grant expires. + example: '2023-01-01T01:01:01.001Z' readOnly: true voidedAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time the grant was voided. + example: '2023-01-01T01:01:01.001Z' recurrence: allOf: - $ref: '#/components/schemas/RecurringPeriod' @@ -9770,13 +9770,12 @@ components: amount: type: number format: double - example: 100 minimum: 0 description: The amount to grant. Should be a positive number. + example: 100 priority: type: integer format: uint8 - example: 1 minimum: 1 maximum: 255 description: |- @@ -9786,11 +9785,12 @@ components: When there are several grants available for the same subject, the system selects the grant with the highest priority. In cases where grants share the same priority level, the grant closest to its expiration will be used first. In the case of two grants have identical priorities and expiration dates, the system will use the grant that was created first. + example: 1 effectiveAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: Effective date for grants and anchor for recurring grants. Provided value will be ceiled to metering windowSize (minute). + example: '2023-01-01T01:01:01.001Z' expiration: allOf: - $ref: '#/components/schemas/ExpirationPeriod' @@ -9798,25 +9798,25 @@ components: maxRolloverAmount: type: number format: double - example: 100 description: |- Grants are rolled over at reset, after which they can have a different balance compared to what they had before the reset. Balance after the reset is calculated as: Balance_After_Reset = MIN(MaxRolloverAmount, MAX(Balance_Before_Reset, MinRolloverAmount)) + example: 100 default: 0 minRolloverAmount: type: number format: double - example: 100 description: |- Grants are rolled over at reset, after which they can have a different balance compared to what they had before the reset. Balance after the reset is calculated as: Balance_After_Reset = MIN(MaxRolloverAmount, MAX(Balance_Before_Reset, MinRolloverAmount)) + example: 100 default: 0 metadata: allOf: - $ref: '#/components/schemas/Metadata' + description: The grant metadata. example: stripePaymentId: pi_4OrAkhLvyihio9p51h9iiFnB - description: The grant metadata. recurrence: allOf: - $ref: '#/components/schemas/RecurringPeriodCreateInput' @@ -9878,22 +9878,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true metadata: @@ -9903,18 +9903,18 @@ components: activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence start of the resource. + example: '2023-01-01T01:01:01.001Z' activeTo: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence end of the resource. + example: '2023-01-01T01:01:01.001Z' id: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: Readonly unique ULID identifier. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV readOnly: true subjectKey: type: string @@ -9932,14 +9932,14 @@ components: example: example-feature-key featureId: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The feature the subject is entitled to use. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV lastReset: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time the last reset happened. + example: '2023-01-01T01:01:01.001Z' readOnly: true currentUsagePeriod: allOf: @@ -9949,8 +9949,8 @@ components: measureUsageFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time from which usage is measured. If not specified on creation, defaults to entitlement creation time. + example: '2023-01-01T01:01:01.001Z' readOnly: true usagePeriod: allOf: @@ -9971,8 +9971,8 @@ components: lastReset: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time the last reset happened. + example: '2023-01-01T01:01:01.001Z' readOnly: true currentUsagePeriod: allOf: @@ -9982,8 +9982,8 @@ components: measureUsageFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time from which usage is measured. If not specified on creation, defaults to entitlement creation time. + example: '2023-01-01T01:01:01.001Z' readOnly: true usagePeriod: allOf: @@ -10008,11 +10008,11 @@ components: example: example-feature-key featureId: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: |- The feature the subject is entitled to use. Either featureKey or featureId is required. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV metadata: allOf: - $ref: '#/components/schemas/Metadata' @@ -10079,16 +10079,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -10115,27 +10115,27 @@ components: config: type: string format: json - example: '{ "integrations": ["github"] }' description: The JSON parsable config of the entitlement. This value is also returned when checking entitlement access and it is useful for configuring fine-grained access settings to the feature, implemented in your own system. Has to be an object. + example: '{ "integrations": ["github"] }' createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true metadata: @@ -10145,18 +10145,18 @@ components: activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence start of the resource. + example: '2023-01-01T01:01:01.001Z' activeTo: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence end of the resource. + example: '2023-01-01T01:01:01.001Z' id: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: Readonly unique ULID identifier. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV readOnly: true subjectKey: type: string @@ -10174,9 +10174,9 @@ components: example: example-feature-key featureId: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The feature the subject is entitled to use. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV currentUsagePeriod: allOf: - $ref: '#/components/schemas/Period' @@ -10203,11 +10203,11 @@ components: example: example-feature-key featureId: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: |- The feature the subject is entitled to use. Either featureKey or featureId is required. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV metadata: allOf: - $ref: '#/components/schemas/Metadata' @@ -10223,8 +10223,8 @@ components: config: type: string format: json - example: '{ "integrations": ["github"] }' description: The JSON parsable config of the entitlement. This value is also returned when checking entitlement access and it is useful for configuring fine-grained access settings to the feature, implemented in your own system. Has to be an object. + example: '{ "integrations": ["github"] }' description: Create inputs for static entitlement EntitlementType: type: string @@ -10241,31 +10241,31 @@ components: properties: hasAccess: type: boolean - example: true description: Whether the subject has access to the feature. Shared accross all entitlement types. + example: true readOnly: true balance: type: number format: double - example: 100 description: Only available for metered entitlements. Metered entitlements are built around a balance calculation where feature usage is deducted from the issued grants. Balance represents the remaining balance of the entitlement, it's value never turns negative. + example: 100 readOnly: true usage: type: number format: double - example: 50 description: Only available for metered entitlements. Returns the total feature usage in the current period. + example: 50 readOnly: true overage: type: number format: double - example: 0 description: Only available for metered entitlements. Overage represents the usage that wasn't covered by grants, e.g. if the subject had a total feature usage of 100 in the period but they were only granted 80, there would be 20 overage. + example: 0 readOnly: true config: type: string - example: '{ key: "value" }' description: Only available for static entitlements. The JSON parsable config of the entitlement. + example: '{ key: "value" }' readOnly: true description: Entitlements are the core of OpenMeter access management. They define access to features for subjects. Entitlements can be metered, boolean, or static. Event: @@ -10279,33 +10279,33 @@ components: properties: id: type: string - example: 5c10fade-1c9e-4d6c-8275-c52c36731d3c minLength: 1 description: Identifies the event. + example: 5c10fade-1c9e-4d6c-8275-c52c36731d3c source: type: string - example: service-name minLength: 1 format: uri-reference description: Identifies the context in which an event happened. + example: service-name specversion: type: string - example: '1.0' minLength: 1 description: The version of the CloudEvents specification which the event uses. + example: '1.0' default: '1.0' type: type: string - example: com.example.someevent minLength: 1 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 - example: application/json description: Content type of the CloudEvents data value. Only the value "application/json" is allowed over HTTP. + example: application/json dataschema: type: string format: uri @@ -10314,14 +10314,14 @@ components: description: Identifies the schema that data adheres to. subject: type: string - example: customer-id minLength: 1 description: Describes the subject of the event in the context of the event producer (identified by source). + example: customer-id time: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: Timestamp of when the occurrence happened. Must adhere to RFC 3339. + example: '2023-01-01T01:01:01.001Z' nullable: true data: type: object @@ -10330,18 +10330,18 @@ components: description: |- The event payload. Optional, if present it must be a JSON object. + description: |- + CloudEvents Specification JSON Schema + + Optional properties are nullable according to the CloudEvents specification: + OPTIONAL not omitted attributes MAY be represented as a null JSON value. example: id: 5c10fade-1c9e-4d6c-8275-c52c36731d3c source: service-name specversion: '1.0' type: prompt subject: customer-id - time: 2023-01-01T01:01:01.001Z - description: |- - CloudEvents Specification JSON Schema - - Optional properties are nullable according to the CloudEvents specification: - OPTIONAL not omitted attributes MAY be represented as a null JSON value. + time: '2023-01-01T01:01:01.001Z' x-go-type-import: path: github.com/cloudevents/sdk-go/v2/event x-go-type: event.Event @@ -10366,8 +10366,8 @@ components: description: The unit of time for the expiration period. count: type: integer - example: 12 description: The number of time units in the expiration period. + example: 12 description: The grant expiration definition Feature: type: object @@ -10381,29 +10381,29 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true archivedAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: Timestamp of when the resource was archived. + example: '2023-01-01T01:01:01.001Z' title: Archival Time readOnly: true key: @@ -10419,35 +10419,35 @@ components: metadata: allOf: - $ref: '#/components/schemas/Metadata' + title: Optional metadata example: key: value - title: Optional metadata meterSlug: type: string minLength: 1 maxLength: 64 pattern: ^[a-z0-9]+(?:_[a-z0-9]+)*$ description: A key is a unique string that is used to identify a resource. - example: tokens_total title: Meter slug + example: tokens_total meterGroupByFilters: type: object additionalProperties: type: string - example: - model: gpt-4 - type: input description: |- Optional meter group by filters. Useful if the meter scope is broader than what feature tracks. Example scenario would be a meter tracking all token use with groupBy fields for the model, then the feature could filter for model=gpt-4. title: Meter group by filters + example: + model: gpt-4 + type: input id: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: Readonly unique ULID identifier. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV readOnly: true description: |- Represents a feature that can be enabled or disabled for a plan. @@ -10471,30 +10471,30 @@ components: metadata: allOf: - $ref: '#/components/schemas/Metadata' + title: Optional metadata example: key: value - title: Optional metadata meterSlug: type: string minLength: 1 maxLength: 64 pattern: ^[a-z0-9]+(?:_[a-z0-9]+)*$ description: A key is a unique string that is used to identify a resource. - example: tokens_total title: Meter slug + example: tokens_total meterGroupByFilters: type: object additionalProperties: type: string - example: - model: gpt-4 - type: input description: |- Optional meter group by filters. Useful if the meter scope is broader than what feature tracks. Example scenario would be a meter tracking all token use with groupBy fields for the model, then the feature could filter for model=gpt-4. title: Meter group by filters + example: + model: gpt-4 + type: input description: |- Represents a feature that can be enabled or disabled for a plan. Used both for product catalog and entitlements. @@ -10506,17 +10506,17 @@ components: properties: id: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: Unique identifier of a feature. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV title: Feature Unique Identifier key: type: string - example: gpt4_tokens description: |- The key is an immutable unique identifier of the feature used throughout the API, for example when interacting with a subject's entitlements. title: Feature Key + example: gpt4_tokens description: Limited representation of a feature resource which includes only its unique identifiers (id, key). FeatureOrderBy: type: string @@ -10535,16 +10535,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -10619,44 +10619,44 @@ components: usage: type: number format: double - example: 100 description: The total usage of the grant in the period. + example: 100 readOnly: true overage: type: number format: double - example: 100 description: Overuse that wasn't covered by grants. + example: 100 readOnly: true balanceAtStart: type: number format: double - example: 100 description: entitlement balance at the start of the period. + example: 100 readOnly: true grantBalancesAtStart: type: object additionalProperties: type: number format: double + description: 'The balance breakdown of each active grant at the start of the period: GrantID: Balance' example: 01G65Z755AFWAKHE12NY0CQ9FH: 100 - description: 'The balance breakdown of each active grant at the start of the period: GrantID: Balance' readOnly: true balanceAtEnd: type: number format: double - example: 100 description: The entitlement balance at the end of the period. + example: 100 readOnly: true grantBalancesAtEnd: type: object additionalProperties: type: number format: double + description: 'The balance breakdown of each active grant at the end of the period: GrantID: Balance' example: 01G65Z755AFWAKHE12NY0CQ9FH: 100 - description: 'The balance breakdown of each active grant at the end of the period: GrantID: Balance' readOnly: true grantUsages: type: array @@ -10685,16 +10685,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -10709,14 +10709,14 @@ components: properties: grantId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The id of the grant + example: 01G65Z755AFWAKHE12NY0CQ9FH usage: type: number format: double - example: 100 description: The usage in the period + example: 100 description: Usage Record IDResource: type: object @@ -10725,9 +10725,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true description: IDResource is a resouce with an ID. @@ -10757,13 +10757,14 @@ components: ingestedAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The date and time the event was ingested. + example: '2023-01-01T01:01:01.001Z' storedAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The date and time the event was stored. + example: '2023-01-01T01:01:01.001Z' + description: An ingested event with optional validation error. example: event: id: 5c10fade-1c9e-4d6c-8275-c52c36731d3c @@ -10771,10 +10772,9 @@ components: specversion: '1.0' type: prompt subject: customer-id - time: 2023-01-01T01:01:01.001Z - ingestedAt: 2023-01-01T01:01:01.001Z - storedAt: 2023-01-01T01:01:02.001Z - description: An ingested event with optional validation error. + time: '2023-01-01T01:01:01.001Z' + ingestedAt: '2023-01-01T01:01:01.001Z' + storedAt: '2023-01-01T01:01:02.001Z' InternalServerErrorProblemResponse: type: object allOf: @@ -10798,9 +10798,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true description: @@ -10818,22 +10818,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true type: @@ -10903,29 +10903,29 @@ components: issuedAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: |- The time the invoice was issued. Depending on the status of the invoice this can mean multiple things: - draft, gathering: The time the invoice will be issued based on the workflow settings. - issued: The time the invoice was issued. + example: '2023-01-01T01:01:01.001Z' readOnly: true draftUntil: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: |- The time until the invoice is in draft status. On draft invoice creation it is calculated from the workflow settings. If manual approval is required, the draftUntil time is set. + example: '2023-01-01T01:01:01.001Z' dueAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: Due time of the fulfillment of the invoice (if available). + example: '2023-01-01T01:01:01.001Z' readOnly: true period: allOf: @@ -10934,11 +10934,17 @@ components: voidedAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: |- The time the invoice was voided. If the invoice was voided, this field will be set to the time the invoice was voided. + example: '2023-01-01T01:01:01.001Z' + readOnly: true + sentToCustomerAt: + type: string + format: date-time + description: The time the invoice was sent to customer. + example: '2023-01-01T01:01:01.001Z' readOnly: true workflow: allOf: @@ -11115,29 +11121,29 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ID of the line. + example: 01G65Z755AFWAKHE12NY0CQ9FH managedBy: allOf: - $ref: '#/components/schemas/InvoiceLineManagedBy' @@ -11211,8 +11217,8 @@ components: invoiceAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time this line item should be invoiced. + example: '2023-01-01T01:01:01.001Z' externalIds: allOf: - $ref: '#/components/schemas/InvoiceLineAppExternalIds' @@ -11289,8 +11295,8 @@ components: invoiceAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time this line item should be invoiced. + example: '2023-01-01T01:01:01.001Z' type: type: string enum: @@ -11316,9 +11322,9 @@ components: default: regular id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The ID of the line. + example: 01G65Z755AFWAKHE12NY0CQ9FH description: |- InvoiceFlatFeeLineReplaceUpdate represents the update model for a flat fee invoice line. @@ -11371,8 +11377,8 @@ components: invoiceAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time this line item should be invoiced. + example: '2023-01-01T01:01:01.001Z' type: type: string enum: @@ -11398,9 +11404,9 @@ components: default: regular customerId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The customer this line item belongs to. + example: 01G65Z755AFWAKHE12NY0CQ9FH description: InvoiceFlatFeePendingLineCreate represents the create model for an invoice line that is sold to the customer as a manually added fee. InvoiceGenericDocumentRef: type: object @@ -11459,29 +11465,29 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ID of the charge or discount. + example: 01G65Z755AFWAKHE12NY0CQ9FH readOnly: true percent: allOf: @@ -11589,7 +11595,6 @@ components: description: TaxConfig stores the configuration for a tax line relative to an invoice line. InvoiceNumber: type: string - example: INV-2024-01-01-01 minLength: 1 maxLength: 256 description: |- @@ -11599,6 +11604,7 @@ components: 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) + example: INV-2024-01-01-01 InvoiceOrderBy: type: string enum: @@ -11618,16 +11624,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -11661,9 +11667,9 @@ components: type: array items: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH description: |- The pending line items to include in the invoice, if not provided: - all line items that have invoice_at < asOf will be included @@ -11672,16 +11678,16 @@ components: asOf: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: |- The time as of which the invoice is created. If not provided, the current time is used. + example: '2023-01-01T01:01:01.001Z' customerId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The customer ID for which to create the invoice. + example: 01G65Z755AFWAKHE12NY0CQ9FH description: |- BillingInvoiceActionInput is the input for creating an invoice. @@ -11694,9 +11700,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The ID of the invoice. + example: 01G65Z755AFWAKHE12NY0CQ9FH readOnly: true number: allOf: @@ -11727,13 +11733,13 @@ components: draftUntil: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: |- The time until the invoice is in draft status. On draft invoice creation it is calculated from the workflow settings. If manual approval is required, the draftUntil time is set. + example: '2023-01-01T01:01:01.001Z' supplier: allOf: - $ref: '#/components/schemas/BillingPartyReplaceUpdate' @@ -11794,8 +11800,8 @@ components: invoiceAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time this line item should be invoiced. + example: '2023-01-01T01:01:01.001Z' type: type: string enum: @@ -11821,12 +11827,12 @@ components: default: regular id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: |- ID of the line. If not specified it will be auto-generated. When discounts are specified, this must be provided, so that the discount can reference it. + example: 01G65Z755AFWAKHE12NY0CQ9FH description: InvoiceSimulationFlatFeeLine represents a flat fee line item that can be input to the simulation endpoint. InvoiceSimulationInput: type: object @@ -11904,8 +11910,8 @@ components: invoiceAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time this line item should be invoiced. + example: '2023-01-01T01:01:01.001Z' type: type: string enum: @@ -11931,12 +11937,12 @@ components: description: The quantity of the item used before this line's period, if the line is billed progressively. id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: |- ID of the line. If not specified it will be auto-generated. When discounts are specified, this must be provided, so that the discount can reference it. + example: 01G65Z755AFWAKHE12NY0CQ9FH description: InvoiceSimulationUsageBasedLine represents a usage-based line item that can be input to the simulation endpoint. InvoiceStatus: type: string @@ -12069,29 +12075,29 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ID of the line. + example: 01G65Z755AFWAKHE12NY0CQ9FH managedBy: allOf: - $ref: '#/components/schemas/InvoiceLineManagedBy' @@ -12165,8 +12171,8 @@ components: invoiceAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time this line item should be invoiced. + example: '2023-01-01T01:01:01.001Z' externalIds: allOf: - $ref: '#/components/schemas/InvoiceLineAppExternalIds' @@ -12248,8 +12254,8 @@ components: invoiceAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time this line item should be invoiced. + example: '2023-01-01T01:01:01.001Z' type: type: string enum: @@ -12267,9 +12273,9 @@ components: description: The feature that the usage is based on. id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The ID of the line. + example: 01G65Z755AFWAKHE12NY0CQ9FH description: |- InvoiceUpdateUsageBasedLineReplaceUpdate represents the update model for an UBP invoice line. @@ -12322,8 +12328,8 @@ components: invoiceAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time this line item should be invoiced. + example: '2023-01-01T01:01:01.001Z' type: type: string enum: @@ -12341,9 +12347,9 @@ components: description: The feature that the usage is based on. customerId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The customer this line item belongs to. + example: 01G65Z755AFWAKHE12NY0CQ9FH description: InvoiceUsageBasedLineCreateWithCustomer represents the create model for an invoice line that is sold to the customer based on usage. InvoiceWorkflowInvoicingSettingsReplaceUpdate: type: object @@ -12355,14 +12361,14 @@ components: draftPeriod: type: string format: ISO8601 - example: P1D description: The period for the invoice to be kept in draft status for manual reviews. + example: P1D default: P1D dueAfter: type: string format: ISO8601 - example: P1D description: The period after which the invoice is due. + example: P1D default: P7D defaultTaxConfig: allOf: @@ -12398,13 +12404,13 @@ components: readOnly: true sourceBillingProfileId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: |- sourceBillingProfileID is the billing profile on which the workflow was based on. The profile is snapshotted on invoice creation, after which it can be altered independently of the profile itself. + example: 01G65Z755AFWAKHE12NY0CQ9FH readOnly: true workflow: allOf: @@ -12497,6 +12503,11 @@ components: items: $ref: '#/components/schemas/AppCapability' description: The app's capabilities. + description: |- + A marketplace listing. + Represent an available app in the app marketplace that can be installed to the organization. + + Marketplace apps only exist in config so they don't extend the Resource model. example: type: stripe name: Stripe @@ -12514,11 +12525,6 @@ components: key: stripe_collect_payments name: Collect Payments description: Stripe payments collects outstanding revenue with Stripe customer's default payment method. - description: |- - A marketplace listing. - Represent an available app in the app marketplace that can be installed to the organization. - - Marketplace apps only exist in config so they don't extend the Resource model. MarketplaceListingList: type: object required: @@ -12562,17 +12568,17 @@ components: MeasureUsageFromTime: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T01:01:01.001Z' Metadata: type: object additionalProperties: type: string - example: - externalId: 019142cc-a016-796a-8113-1a942fecd26d description: |- Set of key-value pairs. Metadata can be used to store additional information about a resource. + example: + externalId: 019142cc-a016-796a-8113-1a942fecd26d x-go-type: map[string]string Meter: type: object @@ -12585,9 +12591,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the meter. + example: 01G65Z755AFWAKHE12NY0CQ9FH readOnly: true slug: type: string @@ -12600,9 +12606,9 @@ components: example: tokens_total description: type: string - example: AI Token Usage minLength: 1 description: A description of the meter. + example: AI Token Usage aggregation: allOf: - $ref: '#/components/schemas/MeterAggregation' @@ -12613,12 +12619,11 @@ components: example: MINUTE eventType: type: string - example: prompt minLength: 1 description: The event type to aggregate. + example: prompt valueProperty: type: string - example: $.tokens minLength: 1 description: |- JSONPath expression to extract the value from the ingested event's data property. @@ -12626,18 +12631,20 @@ components: 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 valueProperty is ignored. + example: $.tokens groupBy: type: object additionalProperties: type: string - example: - type: $.type description: |- 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 + example: + type: $.type + description: A meter is a configuration that defines how to match and aggregate events. example: id: 01G65Z755AFWAKHE12NY0CQ9FH slug: tokens_total @@ -12649,7 +12656,6 @@ components: groupBy: model: $.model type: $.type - description: A meter is a configuration that defines how to match and aggregate events. x-go-type-import: path: github.com/openmeterio/openmeter/pkg/models x-go-type: models.Meter @@ -12674,32 +12680,32 @@ components: from: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T01:01:01.001Z' to: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T01:01:01.001Z' windowSize: $ref: '#/components/schemas/WindowSize' data: type: array items: $ref: '#/components/schemas/MeterQueryRow' + description: The result of a meter query. example: - from: 2023-01-01T00:00:00Z - to: 2023-01-02T00:00:00Z + from: '2023-01-01T00:00:00Z' + to: '2023-01-02T00:00:00Z' windowSize: DAY data: - value: 12 - windowStart: 2023-01-01T00:00:00Z - windowEnd: 2023-01-02T00:00:00Z + windowStart: '2023-01-01T00:00:00Z' + windowEnd: '2023-01-02T00:00:00Z' subject: customer-1 groupBy: model: gpt-4-turbo type: prompt - description: The result of a meter query. MeterQueryRow: type: object required: @@ -12712,28 +12718,28 @@ components: windowStart: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T01:01:01.001Z' windowEnd: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T01:01:01.001Z' subject: type: string groupBy: type: object additionalProperties: type: string + description: A row in the result of a meter query. example: value: 12 - windowStart: 2023-01-01T00:00:00Z - windowEnd: 2023-01-02T00:00:00Z + windowStart: '2023-01-01T00:00:00Z' + windowEnd: '2023-01-02T00:00:00Z' subject: customer-1 groupBy: model: gpt-4-turbo type: prompt - description: A row in the result of a meter query. x-go-type-import: path: github.com/openmeterio/openmeter/pkg/models x-go-type: models.MeterQueryRow @@ -12765,9 +12771,9 @@ components: properties: id: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: Identifies the notification channel. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV title: Channel Unique Identifier readOnly: true type: @@ -12795,16 +12801,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -12831,29 +12837,29 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true id: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: Identifies the notification channel. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV title: Channel Unique Identifier readOnly: true type: @@ -12864,20 +12870,20 @@ components: title: Channel Type name: type: string - example: customer-webhook description: User friendly name of the channel. title: Channel Name + example: customer-webhook disabled: type: boolean - example: true description: Whether the channel is disabled or not. title: Channel Disabled + example: true default: false url: type: string - example: https://example.com/webhook description: Webhook URL where the notification is sent. title: Webhook URL + example: https://example.com/webhook customHeaders: type: object additionalProperties: @@ -12886,13 +12892,13 @@ components: title: Custom HTTP Headers signingSecret: type: string - example: whsec_S6g2HLnTwd9AhHwUIMFggVS9OfoPafN8 pattern: ^(whsec_)?[a-zA-Z0-9+/=]{32,100}$ description: |- Signing secret used for webhook request validation on the receiving end. Format: `base64` encoded random bytes optionally prefixed with `whsec_`. Recommended size: 24 title: Signing Secret + example: whsec_S6g2HLnTwd9AhHwUIMFggVS9OfoPafN8 description: Notification channel with webhook type. NotificationChannelWebhookCreateRequest: type: object @@ -12909,20 +12915,20 @@ components: title: Channel Type name: type: string - example: customer-webhook description: User friendly name of the channel. title: Channel Name + example: customer-webhook disabled: type: boolean - example: true description: Whether the channel is disabled or not. title: Channel Disabled + example: true default: false url: type: string - example: https://example.com/webhook description: Webhook URL where the notification is sent. title: Webhook URL + example: https://example.com/webhook customHeaders: type: object additionalProperties: @@ -12931,13 +12937,13 @@ components: title: Custom HTTP Headers signingSecret: type: string - example: whsec_S6g2HLnTwd9AhHwUIMFggVS9OfoPafN8 pattern: ^(whsec_)?[a-zA-Z0-9+/=]{32,100}$ description: |- Signing secret used for webhook request validation on the receiving end. Format: `base64` encoded random bytes optionally prefixed with `whsec_`. Recommended size: 24 title: Signing Secret + example: whsec_S6g2HLnTwd9AhHwUIMFggVS9OfoPafN8 description: Request with input parameters for creating new notification channel with webhook type. NotificationEvent: type: object @@ -12951,9 +12957,9 @@ components: properties: id: type: string - example: 01J2KNP1YTXQRXHTDJ4KPR7PZ0 pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier of the notification event. + example: 01J2KNP1YTXQRXHTDJ4KPR7PZ0 title: Event Identifier readOnly: true type: @@ -12965,8 +12971,8 @@ components: createdAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: Timestamp when the notification event was created in RFC 3339 format. + example: '2023-01-01T01:01:01.001Z' title: Creation Time readOnly: true rule: @@ -13003,9 +13009,9 @@ components: properties: id: type: string - example: 01J2KNP1YTXQRXHTDJ4KPR7PZ0 pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the notification event the payload belongs to. + example: 01J2KNP1YTXQRXHTDJ4KPR7PZ0 title: Notification Event Identifier readOnly: true type: @@ -13018,8 +13024,8 @@ components: timestamp: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: Timestamp when the notification event was created in RFC 3339 format. + example: '2023-01-01T01:01:01.001Z' title: Creation Time readOnly: true data: @@ -13075,20 +13081,20 @@ components: state: allOf: - $ref: '#/components/schemas/NotificationEventDeliveryStatusState' - example: SUCCESS description: Delivery state of the notification event to the channel. + example: SUCCESS readOnly: true reason: type: string - example: Failed to dispatch event due to provider error. description: The reason of the last deliverry state update. title: State Reason + example: Failed to dispatch event due to provider error. readOnly: true updatedAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: Timestamp of when the status was last updated in RFC 3339 format. + example: '2023-01-01T01:01:01.001Z' title: Last Update Time readOnly: true channel: @@ -13128,16 +13134,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -13173,29 +13179,29 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true id: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: Identifies the notification rule. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV title: Rule Unique Identifier readOnly: true type: @@ -13206,14 +13212,14 @@ components: title: Rule Type name: type: string - example: Balance threshold reached description: The user friendly name of the notification rule. title: Rule Name + example: Balance threshold reached disabled: type: boolean - example: true description: Whether the rule is disabled or not. title: Rule Disabled + example: true default: false channels: type: array @@ -13253,14 +13259,14 @@ components: title: Rule Type name: type: string - example: Balance threshold reached description: The user friendly name of the notification rule. title: Rule Name + example: Balance threshold reached disabled: type: boolean - example: true description: Whether the rule is disabled or not. title: Rule Disabled + example: true default: false thresholds: type: array @@ -13274,9 +13280,9 @@ components: type: array items: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH minItems: 1 description: List of notification channels the rule is applied to. title: Channels @@ -13305,14 +13311,14 @@ components: value: type: number format: double - example: 100 description: Value of the threshold. title: Threshold Value + example: 100 type: allOf: - $ref: '#/components/schemas/NotificationRuleBalanceThresholdValueType' - example: NUMBER description: Type of the threshold. + example: NUMBER description: Threshold value with multiple supported types. NotificationRuleBalanceThresholdValueType: type: string @@ -13337,9 +13343,9 @@ components: properties: id: type: string - example: 01ARZ3NDEKTSV4RRFFQ69G5FAV pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: Identifies the notification rule. + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV title: Rule Unique Identifier readOnly: true type: @@ -13367,16 +13373,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -13407,8 +13413,8 @@ components: dueAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: When the payment is due. + example: '2023-01-01T01:01:01.001Z' readOnly: true notes: type: string @@ -13494,13 +13500,13 @@ components: from: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: Period start time. + example: '2023-01-01T01:01:01.001Z' to: type: string format: date-time - example: 2023-02-01T01:01:01.001Z description: Period end time. + example: '2023-02-01T01:01:01.001Z' description: A period with a start and end time. Plan: type: object @@ -13517,9 +13523,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true name: @@ -13543,22 +13549,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true key: @@ -13584,15 +13590,15 @@ components: effectiveFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The date and time when the plan becomes effective. When not specified, the plan is a draft. + example: '2023-01-01T01:01:01.001Z' title: Effective start date readOnly: true effectiveTo: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The date and time when the plan is no longer effective. When not specified, the plan is effective indefinitely. + example: '2023-01-01T01:01:01.001Z' title: Effective end date readOnly: true status: @@ -13685,16 +13691,16 @@ components: properties: totalCount: type: integer - example: 500 description: The items in the current page. + example: 500 page: type: integer - example: 1 description: The items in the current page. + example: 1 pageSize: type: integer - example: 100 description: The items in the current page. + example: 100 items: type: array items: @@ -13738,9 +13744,9 @@ components: type: string format: duration nullable: true - example: P1Y description: The duration of the phase. title: Duration + example: P1Y rateCards: type: array items: @@ -13763,9 +13769,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The plan ID. + example: 01G65Z755AFWAKHE12NY0CQ9FH key: type: string minLength: 1 @@ -13847,8 +13853,8 @@ components: activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T01:01:01.001Z' name: type: string description: @@ -13869,17 +13875,17 @@ components: activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T01:01:01.001Z' name: type: string description: type: string customerId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH description: Create subscription based on plan. PlanVariant: type: object @@ -13901,10 +13907,10 @@ components: variant: allOf: - $ref: '#/components/schemas/PlanVariant' - example: - currency: USD description: The variant of the plan. title: Variant + example: + currency: USD currency: allOf: - $ref: '#/components/schemas/CurrencyCode' @@ -13944,9 +13950,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH readOnly: true subject: type: string @@ -13954,8 +13960,8 @@ components: expiresAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T01:01:01.001Z' readOnly: true expired: type: boolean @@ -13963,21 +13969,21 @@ components: createdAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T01:01:01.001Z' readOnly: true token: type: string - example: om_portal_IAnD3PpWW2A2Wr8m9jfzeHlGX8xmCXwG.y5q4S-AWqFu6qjfaFz0zQq4Ez28RsnyVwJffX5qxMvo description: The token is only returned at creation. + example: om_portal_IAnD3PpWW2A2Wr8m9jfzeHlGX8xmCXwG.y5q4S-AWqFu6qjfaFz0zQq4Ez28RsnyVwJffX5qxMvo readOnly: true allowedMeterSlugs: type: array items: type: string + description: Optional, if defined only the specified meters will be allowed. example: - tokens_total - description: Optional, if defined only the specified meters will be allowed. description: |- A consumer portal token. @@ -14158,11 +14164,14 @@ components: allOf: - $ref: '#/components/schemas/FlatPriceWithPaymentTerm' nullable: true - example: {} description: |- The price of the rate card. When null, the feature or service is free. title: Price + example: + type: flat + amount: '100' + paymentTerm: in_arrears description: A flat fee rate card defines a one-time purchase or a recurring fee. RateCardMeteredEntitlement: type: object @@ -14240,11 +14249,14 @@ components: allOf: - $ref: '#/components/schemas/FlatPriceWithPaymentTerm' nullable: true - example: {} description: |- The price of the rate card. When null, the feature or service is free. title: Price + example: + type: flat + amount: '100' + paymentTerm: in_arrears description: Flat fee rate card override. RateCardOverrideUsageBased: type: object @@ -14283,8 +14295,8 @@ components: config: type: string format: json - example: '{ "integrations": ["github"] }' description: The JSON parsable config of the entitlement. This value is also returned when checking entitlement access and it is useful for configuring fine-grained access settings to the feature, implemented in your own system. Has to be an object. + example: '{ "integrations": ["github"] }' description: Entitlement template of a static entitlement. RateCardType: type: string @@ -14396,14 +14408,14 @@ components: anchor: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: A date-time anchor to base the recurring period on. + example: '2023-01-01T01:01:01.001Z' title: Anchor time + description: Recurring period with an interval and an anchor. example: interval: DAY intervalISO: P1D - anchor: 2023-01-01T01:01:01.001Z - description: Recurring period with an interval and an anchor. + anchor: '2023-01-01T01:01:01.001Z' RecurringPeriodCreateInput: type: object required: @@ -14417,13 +14429,13 @@ components: anchor: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: A date-time anchor to base the recurring period on. + example: '2023-01-01T01:01:01.001Z' title: Anchor time + description: Recurring period with an interval and an anchor. example: interval: DAY - anchor: 2023-01-01T01:01:01.001Z - description: Recurring period with an interval and an anchor. + anchor: '2023-01-01T01:01:01.001Z' RecurringPeriodInterval: anyOf: - type: string @@ -14452,8 +14464,8 @@ components: effectiveAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time at which the reset takes effect, defaults to now. The reset cannot be in the future. The provided value is truncated to the minute due to how historical meter data is stored. + example: '2023-01-01T01:01:01.001Z' retainAnchor: type: boolean description: |- @@ -14481,9 +14493,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true name: @@ -14507,22 +14519,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true listing: @@ -14562,11 +14574,11 @@ components: readOnly: true id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: |- The app ID. If not provided, it will use the global default for the app type. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: App ID type: type: string @@ -14629,9 +14641,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true name: @@ -14655,22 +14667,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true listing: @@ -14704,6 +14716,7 @@ components: description: |- The masked API key. Only shows the first 8 and last 3 characters. + description: A installed Stripe app object. example: id: 01G65Z755AFWAKHE12NY0CQ9FH type: stripe @@ -14727,12 +14740,11 @@ components: key: stripe_collect_payments name: Collect Payments description: Stripe payments collects outstanding revenue with Stripe customer's default payment method. - createdAt: 2024-01-01T01:01:01.001Z - updatedAt: 2024-01-01T01:01:01.001Z + createdAt: '2024-01-01T01:01:01.001Z' + updatedAt: '2024-01-01T01:01:01.001Z' stripeAccountId: acct_123456789 livemode: true maskedAPIKey: sk_live_************abc - description: A installed Stripe app object. StripeCheckoutSessionMode: type: string enum: @@ -14746,11 +14758,11 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: |- The app ID. If not provided, it will use the global default for the app type. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: App ID type: type: string @@ -14769,10 +14781,10 @@ components: stripeDefaultPaymentMethodId: type: string description: The Stripe default payment method ID. + description: Stripe Customer App Data. example: type: stripe stripeCustomerId: cus_xxxxxxxxxxxxxx - description: Stripe Customer App Data. StripePaymentIntentStatus: type: string enum: @@ -14822,13 +14834,13 @@ components: properties: code: type: string - example: txcd_10000000 pattern: ^txcd_\d{8}$ description: |- Product tax code. See: https://docs.stripe.com/tax/tax-codes title: Tax code + example: txcd_10000000 description: The tax config for Stripe. StripeWebhookEvent: type: object @@ -14869,19 +14881,19 @@ components: properties: namespaceId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH appId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH customerId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ULID (Universally Unique Lexicographically Sortable Identifier). + example: 01G65Z755AFWAKHE12NY0CQ9FH description: Stripe webhook response. Subject: type: object @@ -14891,48 +14903,49 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the subject. + example: 01G65Z755AFWAKHE12NY0CQ9FH readOnly: true key: type: string - example: customer-id description: A unique, human-readable identifier for the subject. + example: customer-id displayName: type: string nullable: true - example: Customer Name description: A human-readable display name for the subject. + example: Customer Name metadata: type: object additionalProperties: {} nullable: true - example: {} + example: + hubspotId: '123456' currentPeriodStart: type: string format: date-time - example: 2023-01-01T00:00:00Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-01-01T00:00:00Z' currentPeriodEnd: type: string format: date-time - example: 2023-02-01T00:00:00Z description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + example: '2023-02-01T00:00:00Z' stripeCustomerId: type: string nullable: true example: cus_JMOlctsKV8 + description: A subject is a unique identifier for a user or entity. example: id: 01G65Z755AFWAKHE12NY0CQ9FH key: customer-id displayName: Customer Name metadata: hubspotId: '123456' - currentPeriodStart: 2023-01-01T00:00:00Z - currentPeriodEnd: 2023-02-01T00:00:00Z + currentPeriodStart: '2023-01-01T00:00:00Z' + currentPeriodEnd: '2023-02-01T00:00:00Z' stripeCustomerId: cus_JMOlctsKV8 - description: A subject is a unique identifier for a user or entity. Subscription: type: object required: @@ -14947,9 +14960,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true name: @@ -14973,34 +14986,34 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence start of the resource. + example: '2023-01-01T01:01:01.001Z' activeTo: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence end of the resource. + example: '2023-01-01T01:01:01.001Z' status: allOf: - $ref: '#/components/schemas/SubscriptionStatus' @@ -15008,9 +15021,9 @@ components: readOnly: true customerId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The customer ID of the subscription. + example: 01G65Z755AFWAKHE12NY0CQ9FH plan: allOf: - $ref: '#/components/schemas/PlanReference' @@ -15093,9 +15106,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true name: @@ -15119,34 +15132,34 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence start of the resource. + example: '2023-01-01T01:01:01.001Z' activeTo: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence end of the resource. + example: '2023-01-01T01:01:01.001Z' status: allOf: - $ref: '#/components/schemas/SubscriptionStatus' @@ -15154,9 +15167,9 @@ components: readOnly: true customerId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The customer ID of the subscription. + example: 01G65Z755AFWAKHE12NY0CQ9FH plan: allOf: - $ref: '#/components/schemas/PlanReference' @@ -15188,9 +15201,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true name: @@ -15214,34 +15227,34 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence start of the resource. + example: '2023-01-01T01:01:01.001Z' activeTo: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The cadence end of the resource. + example: '2023-01-01T01:01:01.001Z' key: type: string minLength: 1 @@ -15286,11 +15299,14 @@ components: allOf: - $ref: '#/components/schemas/TieredPriceWithCommitments' nullable: true - example: {} description: |- The price of the rate card. When null, the feature or service is free. title: Price + example: + type: flat + amount: '100' + paymentTerm: in_arrears included: allOf: - $ref: '#/components/schemas/SubscriptionItemIncluded' @@ -15329,9 +15345,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true name: @@ -15355,22 +15371,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true key: @@ -15388,13 +15404,13 @@ components: activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time from which the phase is active. + example: '2023-01-01T01:01:01.001Z' activeTo: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The until which the Phase is active. + example: '2023-01-01T01:01:01.001Z' description: Subscription phase, analogous to plan phases. SubscriptionPhaseCreate: type: object @@ -15407,19 +15423,19 @@ components: type: string format: duration nullable: true - example: P1Y description: |- Interval after the subscription starts to transition to the phase. When null, the phase starts immediately after the subscription starts. title: Start after + example: P1Y duration: type: string format: duration - example: P1M description: |- The intended duration of the new phase. Duration is required when the phase will not be the last phase. title: Duration + example: P1M discounts: type: array items: @@ -15452,9 +15468,9 @@ components: properties: id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: A unique identifier for the resource. + example: 01G65Z755AFWAKHE12NY0CQ9FH title: ID readOnly: true name: @@ -15478,22 +15494,22 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true key: @@ -15511,13 +15527,13 @@ components: activeFrom: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The time from which the phase is active. + example: '2023-01-01T01:01:01.001Z' activeTo: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: The until which the Phase is active. + example: '2023-01-01T01:01:01.001Z' items: type: array items: @@ -15680,29 +15696,29 @@ components: type: type: string format: uri - example: about:blank description: Type contains a URI that identifies the problem type. + example: about:blank default: about:blank title: type: string - example: Bad Request description: A a short, human-readable summary of the problem type. + example: Bad Request status: type: integer format: int16 - example: 400 minimum: 400 maximum: 599 description: The HTTP status code generated by the origin server for this occurrence of the problem. + example: 400 detail: type: string - example: The request body must be a JSON object. description: A human-readable explanation specific to this occurrence of the problem. + example: The request body must be a JSON object. instance: type: string format: uri - example: urn:request:local/JMOlctsKV8-000001 description: A URI reference that identifies the specific occurrence of the problem. + example: urn:request:local/JMOlctsKV8-000001 additionalProperties: anyOf: - type: string @@ -15768,29 +15784,29 @@ components: createdAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was created. + example: '2024-01-01T01:01:01.001Z' title: Creation Time readOnly: true updatedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was last updated. + example: '2024-01-01T01:01:01.001Z' title: Last Update Time readOnly: true deletedAt: type: string format: date-time - example: 2024-01-01T01:01:01.001Z description: Timestamp of when the resource was permanently deleted. + example: '2024-01-01T01:01:01.001Z' title: Deletion Time readOnly: true id: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: ID of the charge or discount. + example: 01G65Z755AFWAKHE12NY0CQ9FH readOnly: true severity: allOf: @@ -15892,9 +15908,9 @@ components: properties: lineId: type: string - example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ description: The line item ID to override. + example: 01G65Z755AFWAKHE12NY0CQ9FH action: allOf: - $ref: '#/components/schemas/VoidInvoiceActionCreateItem' @@ -15950,11 +15966,11 @@ components: nextInvoiceAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: |- The time at which the line item should be invoiced again. If not provided, the line item will be re-invoiced now. + example: '2023-01-01T01:01:01.001Z' description: VoidInvoiceLinePendingAction describes how to handle the voidied line item in the invoice. VoidInvoiceLinePendingActionCreateItem: type: object @@ -15969,11 +15985,11 @@ components: nextInvoiceAt: type: string format: date-time - example: 2023-01-01T01:01:01.001Z description: |- The time at which the line item should be invoiced again. If not provided, the line item will be re-invoiced now. + example: '2023-01-01T01:01:01.001Z' description: VoidInvoiceLinePendingAction describes how to handle the voidied line item in the invoice. WindowSize: type: string diff --git a/api/spec/src/billing/invoices/invoice.tsp b/api/spec/src/billing/invoices/invoice.tsp index e681f4c0b..25b5f128f 100644 --- a/api/spec/src/billing/invoices/invoice.tsp +++ b/api/spec/src/billing/invoices/invoice.tsp @@ -158,6 +158,12 @@ model Invoice { @visibility(Lifecycle.Read) voidedAt?: DateTime; + /** + * The time the invoice was sent to customer. + */ + @visibility(Lifecycle.Read) + sentToCustomerAt?: DateTime; + /** * The workflow associated with the invoice. * diff --git a/openmeter/app/sandbox/app.go b/openmeter/app/sandbox/app.go index 0e3a70901..2b63a09f9 100644 --- a/openmeter/app/sandbox/app.go +++ b/openmeter/app/sandbox/app.go @@ -10,6 +10,7 @@ import ( "github.com/openmeterio/openmeter/openmeter/billing" customerapp "github.com/openmeterio/openmeter/openmeter/customer/app" customerentity "github.com/openmeterio/openmeter/openmeter/customer/entity" + "github.com/openmeterio/openmeter/pkg/clock" ) var ( @@ -71,10 +72,9 @@ func (a App) FinalizeInvoice(ctx context.Context, invoice billing.Invoice) (*bil return nil, fmt.Errorf("failed to generate invoice sequence number: %w", err) } - finalizeResult := billing.NewFinalizeInvoiceResult() - finalizeResult.SetInvoiceNumber(invoiceNumber) - - return finalizeResult, nil + return billing.NewFinalizeInvoiceResult(). + SetInvoiceNumber(invoiceNumber). + SetSentToCustomerAt(clock.Now()), nil } func (a App) DeleteInvoice(ctx context.Context, invoice billing.Invoice) error { diff --git a/openmeter/billing/adapter/invoice.go b/openmeter/billing/adapter/invoice.go index 64e8046d9..04f2b450b 100644 --- a/openmeter/billing/adapter/invoice.go +++ b/openmeter/billing/adapter/invoice.go @@ -454,10 +454,11 @@ func (a *adapter) UpdateInvoice(ctx context.Context, in billing.UpdateInvoiceAda // Type is immutable SetNumber(in.Number). SetOrClearDescription(in.Description). - SetOrClearDueAt(in.DueAt). - SetOrClearDraftUntil(in.DraftUntil). - SetOrClearIssuedAt(in.IssuedAt). - SetOrClearDeletedAt(in.DeletedAt). + SetOrClearDueAt(convert.SafeToUTC(in.DueAt)). + SetOrClearDraftUntil(convert.SafeToUTC(in.DraftUntil)). + SetOrClearIssuedAt(convert.SafeToUTC(in.IssuedAt)). + SetOrClearDeletedAt(convert.SafeToUTC(in.DeletedAt)). + SetOrClearSentToCustomerAt(convert.SafeToUTC(in.SentToCustomerAt)). // Totals SetAmount(in.Totals.Amount). SetChargesTotal(in.Totals.ChargesTotal). @@ -469,13 +470,13 @@ func (a *adapter) UpdateInvoice(ctx context.Context, in billing.UpdateInvoiceAda if in.CollectionAt != nil && !in.CollectionAt.IsZero() { updateQuery = updateQuery. - SetCollectionAt(*in.CollectionAt) + SetCollectionAt(in.CollectionAt.In(time.UTC)) } if in.Period != nil { updateQuery = updateQuery. - SetPeriodStart(in.Period.Start). - SetPeriodEnd(in.Period.End) + SetPeriodStart(in.Period.Start.In(time.UTC)). + SetPeriodEnd(in.Period.End.In(time.UTC)) } else { updateQuery = updateQuery. ClearPeriodStart(). @@ -653,16 +654,17 @@ func (a *adapter) GetInvoiceOwnership(ctx context.Context, in billing.GetInvoice func (a *adapter) mapInvoiceFromDB(ctx context.Context, invoice *db.BillingInvoice, expand billing.InvoiceExpand) (billing.Invoice, error) { res := billing.Invoice{ InvoiceBase: billing.InvoiceBase{ - ID: invoice.ID, - Namespace: invoice.Namespace, - Metadata: invoice.Metadata, - Currency: invoice.Currency, - Status: invoice.Status, - Type: invoice.Type, - Number: invoice.Number, - Description: invoice.Description, - DueAt: invoice.DueAt, - DraftUntil: invoice.DraftUntil, + ID: invoice.ID, + Namespace: invoice.Namespace, + Metadata: invoice.Metadata, + Currency: invoice.Currency, + Status: invoice.Status, + Type: invoice.Type, + Number: invoice.Number, + Description: invoice.Description, + DueAt: convert.TimePtrIn(invoice.DueAt, time.UTC), + DraftUntil: convert.TimePtrIn(invoice.DraftUntil, time.UTC), + SentToCustomerAt: convert.TimePtrIn(invoice.SentToCustomerAt, time.UTC), Supplier: billing.SupplierContact{ Name: invoice.SupplierName, Address: models.Address{ diff --git a/openmeter/billing/app.go b/openmeter/billing/app.go index 63e66304c..98d23a4e4 100644 --- a/openmeter/billing/app.go +++ b/openmeter/billing/app.go @@ -4,6 +4,9 @@ import ( "context" "errors" "fmt" + "time" + + "github.com/samber/mo" appentity "github.com/openmeterio/openmeter/openmeter/app/entity" ) @@ -27,20 +30,23 @@ func (u *UpsertResults) GetInvoiceNumber() (string, bool) { return u.invoiceNumber, u.invoiceNumber != "" } -func (u *UpsertResults) SetInvoiceNumber(invoiceNumber string) { +func (u *UpsertResults) SetInvoiceNumber(invoiceNumber string) *UpsertResults { u.invoiceNumber = invoiceNumber + return u } func (u *UpsertResults) GetExternalID() (string, bool) { return u.externalID, u.externalID != "" } -func (u *UpsertResults) SetExternalID(externalID string) { +func (u *UpsertResults) SetExternalID(externalID string) *UpsertResults { u.externalID = externalID + return u } -func (u *UpsertResults) AddLineExternalID(lineID string, externalID string) { +func (u *UpsertResults) AddLineExternalID(lineID string, externalID string) *UpsertResults { u.lineExternalIDs[lineID] = externalID + return u } func (u *UpsertResults) GetLineExternalID(lineID string) (string, bool) { @@ -52,8 +58,9 @@ func (u *UpsertResults) GetLineExternalIDs() map[string]string { return u.lineExternalIDs } -func (u *UpsertResults) AddLineDiscountExternalID(lineDiscountID string, externalID string) { +func (u *UpsertResults) AddLineDiscountExternalID(lineDiscountID string, externalID string) *UpsertResults { u.LineDiscountExternalIDs[lineDiscountID] = externalID + return u } func (u *UpsertResults) GetLineDiscountExternalID(lineDiscountID string) (string, bool) { @@ -74,6 +81,7 @@ func NewUpsertInvoiceResult() *UpsertInvoiceResult { type FinalizeInvoiceResult struct { invoiceNumber string paymentExternalID string + sentToCustomerAt mo.Option[time.Time] } func NewFinalizeInvoiceResult() *FinalizeInvoiceResult { @@ -84,16 +92,27 @@ func (f *FinalizeInvoiceResult) GetPaymentExternalID() (string, bool) { return f.paymentExternalID, f.paymentExternalID != "" } -func (f *FinalizeInvoiceResult) SetPaymentExternalID(paymentExternalID string) { +func (f *FinalizeInvoiceResult) SetPaymentExternalID(paymentExternalID string) *FinalizeInvoiceResult { f.paymentExternalID = paymentExternalID + return f } func (u *FinalizeInvoiceResult) GetInvoiceNumber() (string, bool) { return u.invoiceNumber, u.invoiceNumber != "" } -func (f *FinalizeInvoiceResult) SetInvoiceNumber(invoiceNumber string) { +func (f *FinalizeInvoiceResult) SetInvoiceNumber(invoiceNumber string) *FinalizeInvoiceResult { f.invoiceNumber = invoiceNumber + return f +} + +func (f *FinalizeInvoiceResult) GetSentToCustomerAt() (time.Time, bool) { + return f.sentToCustomerAt.OrEmpty(), f.sentToCustomerAt.IsPresent() +} + +func (f *FinalizeInvoiceResult) SetSentToCustomerAt(sentToCustomerAt time.Time) *FinalizeInvoiceResult { + f.sentToCustomerAt = mo.Some(sentToCustomerAt) + return f } type InvoicingApp interface { diff --git a/openmeter/billing/httpdriver/invoice.go b/openmeter/billing/httpdriver/invoice.go index 3cf8fafad..dd880400a 100644 --- a/openmeter/billing/httpdriver/invoice.go +++ b/openmeter/billing/httpdriver/invoice.go @@ -481,14 +481,15 @@ func (h *handler) mapInvoiceToAPI(invoice billing.Invoice) (api.Invoice, error) out := api.Invoice{ Id: invoice.ID, - CreatedAt: invoice.CreatedAt, - UpdatedAt: invoice.UpdatedAt, - DeletedAt: invoice.DeletedAt, - IssuedAt: invoice.IssuedAt, - VoidedAt: invoice.VoidedAt, - DueAt: invoice.DueAt, - DraftUntil: invoice.DraftUntil, - Period: mapPeriodToAPI(invoice.Period), + CreatedAt: invoice.CreatedAt, + UpdatedAt: invoice.UpdatedAt, + DeletedAt: invoice.DeletedAt, + IssuedAt: invoice.IssuedAt, + VoidedAt: invoice.VoidedAt, + DueAt: invoice.DueAt, + DraftUntil: invoice.DraftUntil, + SentToCustomerAt: invoice.SentToCustomerAt, + Period: mapPeriodToAPI(invoice.Period), Currency: string(invoice.Currency), Customer: mapInvoiceCustomerToAPI(invoice.Customer), diff --git a/openmeter/billing/invoice.go b/openmeter/billing/invoice.go index 66702165e..a8b8c3806 100644 --- a/openmeter/billing/invoice.go +++ b/openmeter/billing/invoice.go @@ -198,12 +198,13 @@ type InvoiceBase struct { DueAt *time.Time `json:"dueDate,omitempty"` - CreatedAt time.Time `json:"createdAt"` - UpdatedAt time.Time `json:"updatedAt"` - VoidedAt *time.Time `json:"voidedAt,omitempty"` - DraftUntil *time.Time `json:"draftUntil,omitempty"` - IssuedAt *time.Time `json:"issuedAt,omitempty"` - DeletedAt *time.Time `json:"deletedAt,omitempty"` + CreatedAt time.Time `json:"createdAt"` + UpdatedAt time.Time `json:"updatedAt"` + VoidedAt *time.Time `json:"voidedAt,omitempty"` + DraftUntil *time.Time `json:"draftUntil,omitempty"` + IssuedAt *time.Time `json:"issuedAt,omitempty"` + DeletedAt *time.Time `json:"deletedAt,omitempty"` + SentToCustomerAt *time.Time `json:"sentToCustomerAt,omitempty"` CollectionAt *time.Time `json:"collectionAt,omitempty"` diff --git a/openmeter/billing/service/invoicestate.go b/openmeter/billing/service/invoicestate.go index 81d1d5ddc..797e36990 100644 --- a/openmeter/billing/service/invoicestate.go +++ b/openmeter/billing/service/invoicestate.go @@ -478,6 +478,10 @@ func (m *InvoiceStateMachine) finalizeInvoice(ctx context.Context) error { if invoiceNumber, ok := results.GetInvoiceNumber(); ok { m.Invoice.Number = invoiceNumber } + + if sentToCustomerAt, ok := results.GetSentToCustomerAt(); ok { + m.Invoice.SentToCustomerAt = &sentToCustomerAt + } } return nil diff --git a/openmeter/ent/db/billinginvoice.go b/openmeter/ent/db/billinginvoice.go index aa3b29f97..60f4be164 100644 --- a/openmeter/ent/db/billinginvoice.go +++ b/openmeter/ent/db/billinginvoice.go @@ -100,6 +100,8 @@ type BillingInvoice struct { VoidedAt *time.Time `json:"voided_at,omitempty"` // IssuedAt holds the value of the "issued_at" field. IssuedAt *time.Time `json:"issued_at,omitempty"` + // SentToCustomerAt holds the value of the "sent_to_customer_at" field. + SentToCustomerAt *time.Time `json:"sent_to_customer_at,omitempty"` // DraftUntil holds the value of the "draft_until" field. DraftUntil *time.Time `json:"draft_until,omitempty"` // Currency holds the value of the "currency" field. @@ -261,7 +263,7 @@ func (*BillingInvoice) scanValues(columns []string) ([]any, error) { values[i] = new(alpacadecimal.Decimal) case billinginvoice.FieldID, billinginvoice.FieldNamespace, billinginvoice.FieldSupplierAddressCountry, billinginvoice.FieldSupplierAddressPostalCode, billinginvoice.FieldSupplierAddressState, billinginvoice.FieldSupplierAddressCity, billinginvoice.FieldSupplierAddressLine1, billinginvoice.FieldSupplierAddressLine2, billinginvoice.FieldSupplierAddressPhoneNumber, billinginvoice.FieldCustomerAddressCountry, billinginvoice.FieldCustomerAddressPostalCode, billinginvoice.FieldCustomerAddressState, billinginvoice.FieldCustomerAddressCity, billinginvoice.FieldCustomerAddressLine1, billinginvoice.FieldCustomerAddressLine2, billinginvoice.FieldCustomerAddressPhoneNumber, billinginvoice.FieldSupplierName, billinginvoice.FieldSupplierTaxCode, billinginvoice.FieldCustomerName, billinginvoice.FieldNumber, billinginvoice.FieldType, billinginvoice.FieldDescription, billinginvoice.FieldCustomerID, billinginvoice.FieldSourceBillingProfileID, billinginvoice.FieldCurrency, billinginvoice.FieldStatus, billinginvoice.FieldWorkflowConfigID, billinginvoice.FieldTaxAppID, billinginvoice.FieldInvoicingAppID, billinginvoice.FieldPaymentAppID, billinginvoice.FieldInvoicingAppExternalID, billinginvoice.FieldPaymentAppExternalID: values[i] = new(sql.NullString) - case billinginvoice.FieldCreatedAt, billinginvoice.FieldUpdatedAt, billinginvoice.FieldDeletedAt, billinginvoice.FieldVoidedAt, billinginvoice.FieldIssuedAt, billinginvoice.FieldDraftUntil, billinginvoice.FieldDueAt, billinginvoice.FieldPeriodStart, billinginvoice.FieldPeriodEnd, billinginvoice.FieldCollectionAt: + case billinginvoice.FieldCreatedAt, billinginvoice.FieldUpdatedAt, billinginvoice.FieldDeletedAt, billinginvoice.FieldVoidedAt, billinginvoice.FieldIssuedAt, billinginvoice.FieldSentToCustomerAt, billinginvoice.FieldDraftUntil, billinginvoice.FieldDueAt, billinginvoice.FieldPeriodStart, billinginvoice.FieldPeriodEnd, billinginvoice.FieldCollectionAt: values[i] = new(sql.NullTime) default: values[i] = new(sql.UnknownType) @@ -529,6 +531,13 @@ func (bi *BillingInvoice) assignValues(columns []string, values []any) error { bi.IssuedAt = new(time.Time) *bi.IssuedAt = value.Time } + case billinginvoice.FieldSentToCustomerAt: + if value, ok := values[i].(*sql.NullTime); !ok { + return fmt.Errorf("unexpected type %T for field sent_to_customer_at", values[i]) + } else if value.Valid { + bi.SentToCustomerAt = new(time.Time) + *bi.SentToCustomerAt = value.Time + } case billinginvoice.FieldDraftUntil: if value, ok := values[i].(*sql.NullTime); !ok { return fmt.Errorf("unexpected type %T for field draft_until", values[i]) @@ -843,6 +852,11 @@ func (bi *BillingInvoice) String() string { builder.WriteString(v.Format(time.ANSIC)) } builder.WriteString(", ") + if v := bi.SentToCustomerAt; v != nil { + builder.WriteString("sent_to_customer_at=") + builder.WriteString(v.Format(time.ANSIC)) + } + builder.WriteString(", ") if v := bi.DraftUntil; v != nil { builder.WriteString("draft_until=") builder.WriteString(v.Format(time.ANSIC)) diff --git a/openmeter/ent/db/billinginvoice/billinginvoice.go b/openmeter/ent/db/billinginvoice/billinginvoice.go index ce543f03d..5b87af8a1 100644 --- a/openmeter/ent/db/billinginvoice/billinginvoice.go +++ b/openmeter/ent/db/billinginvoice/billinginvoice.go @@ -90,6 +90,8 @@ const ( FieldVoidedAt = "voided_at" // FieldIssuedAt holds the string denoting the issued_at field in the database. FieldIssuedAt = "issued_at" + // FieldSentToCustomerAt holds the string denoting the sent_to_customer_at field in the database. + FieldSentToCustomerAt = "sent_to_customer_at" // FieldDraftUntil holds the string denoting the draft_until field in the database. FieldDraftUntil = "draft_until" // FieldCurrency holds the string denoting the currency field in the database. @@ -241,6 +243,7 @@ var Columns = []string{ FieldSourceBillingProfileID, FieldVoidedAt, FieldIssuedAt, + FieldSentToCustomerAt, FieldDraftUntil, FieldCurrency, FieldDueAt, @@ -498,6 +501,11 @@ func ByIssuedAt(opts ...sql.OrderTermOption) OrderOption { return sql.OrderByField(FieldIssuedAt, opts...).ToFunc() } +// BySentToCustomerAt orders the results by the sent_to_customer_at field. +func BySentToCustomerAt(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldSentToCustomerAt, opts...).ToFunc() +} + // ByDraftUntil orders the results by the draft_until field. func ByDraftUntil(opts ...sql.OrderTermOption) OrderOption { return sql.OrderByField(FieldDraftUntil, opts...).ToFunc() diff --git a/openmeter/ent/db/billinginvoice/where.go b/openmeter/ent/db/billinginvoice/where.go index 22b21f8b0..3f0827795 100644 --- a/openmeter/ent/db/billinginvoice/where.go +++ b/openmeter/ent/db/billinginvoice/where.go @@ -241,6 +241,11 @@ func IssuedAt(v time.Time) predicate.BillingInvoice { return predicate.BillingInvoice(sql.FieldEQ(FieldIssuedAt, v)) } +// SentToCustomerAt applies equality check predicate on the "sent_to_customer_at" field. It's identical to SentToCustomerAtEQ. +func SentToCustomerAt(v time.Time) predicate.BillingInvoice { + return predicate.BillingInvoice(sql.FieldEQ(FieldSentToCustomerAt, v)) +} + // DraftUntil applies equality check predicate on the "draft_until" field. It's identical to DraftUntilEQ. func DraftUntil(v time.Time) predicate.BillingInvoice { return predicate.BillingInvoice(sql.FieldEQ(FieldDraftUntil, v)) @@ -2480,6 +2485,56 @@ func IssuedAtNotNil() predicate.BillingInvoice { return predicate.BillingInvoice(sql.FieldNotNull(FieldIssuedAt)) } +// SentToCustomerAtEQ applies the EQ predicate on the "sent_to_customer_at" field. +func SentToCustomerAtEQ(v time.Time) predicate.BillingInvoice { + return predicate.BillingInvoice(sql.FieldEQ(FieldSentToCustomerAt, v)) +} + +// SentToCustomerAtNEQ applies the NEQ predicate on the "sent_to_customer_at" field. +func SentToCustomerAtNEQ(v time.Time) predicate.BillingInvoice { + return predicate.BillingInvoice(sql.FieldNEQ(FieldSentToCustomerAt, v)) +} + +// SentToCustomerAtIn applies the In predicate on the "sent_to_customer_at" field. +func SentToCustomerAtIn(vs ...time.Time) predicate.BillingInvoice { + return predicate.BillingInvoice(sql.FieldIn(FieldSentToCustomerAt, vs...)) +} + +// SentToCustomerAtNotIn applies the NotIn predicate on the "sent_to_customer_at" field. +func SentToCustomerAtNotIn(vs ...time.Time) predicate.BillingInvoice { + return predicate.BillingInvoice(sql.FieldNotIn(FieldSentToCustomerAt, vs...)) +} + +// SentToCustomerAtGT applies the GT predicate on the "sent_to_customer_at" field. +func SentToCustomerAtGT(v time.Time) predicate.BillingInvoice { + return predicate.BillingInvoice(sql.FieldGT(FieldSentToCustomerAt, v)) +} + +// SentToCustomerAtGTE applies the GTE predicate on the "sent_to_customer_at" field. +func SentToCustomerAtGTE(v time.Time) predicate.BillingInvoice { + return predicate.BillingInvoice(sql.FieldGTE(FieldSentToCustomerAt, v)) +} + +// SentToCustomerAtLT applies the LT predicate on the "sent_to_customer_at" field. +func SentToCustomerAtLT(v time.Time) predicate.BillingInvoice { + return predicate.BillingInvoice(sql.FieldLT(FieldSentToCustomerAt, v)) +} + +// SentToCustomerAtLTE applies the LTE predicate on the "sent_to_customer_at" field. +func SentToCustomerAtLTE(v time.Time) predicate.BillingInvoice { + return predicate.BillingInvoice(sql.FieldLTE(FieldSentToCustomerAt, v)) +} + +// SentToCustomerAtIsNil applies the IsNil predicate on the "sent_to_customer_at" field. +func SentToCustomerAtIsNil() predicate.BillingInvoice { + return predicate.BillingInvoice(sql.FieldIsNull(FieldSentToCustomerAt)) +} + +// SentToCustomerAtNotNil applies the NotNil predicate on the "sent_to_customer_at" field. +func SentToCustomerAtNotNil() predicate.BillingInvoice { + return predicate.BillingInvoice(sql.FieldNotNull(FieldSentToCustomerAt)) +} + // DraftUntilEQ applies the EQ predicate on the "draft_until" field. func DraftUntilEQ(v time.Time) predicate.BillingInvoice { return predicate.BillingInvoice(sql.FieldEQ(FieldDraftUntil, v)) diff --git a/openmeter/ent/db/billinginvoice_create.go b/openmeter/ent/db/billinginvoice_create.go index 6f338501c..90bc0f11c 100644 --- a/openmeter/ent/db/billinginvoice_create.go +++ b/openmeter/ent/db/billinginvoice_create.go @@ -424,6 +424,20 @@ func (bic *BillingInvoiceCreate) SetNillableIssuedAt(t *time.Time) *BillingInvoi return bic } +// SetSentToCustomerAt sets the "sent_to_customer_at" field. +func (bic *BillingInvoiceCreate) SetSentToCustomerAt(t time.Time) *BillingInvoiceCreate { + bic.mutation.SetSentToCustomerAt(t) + return bic +} + +// SetNillableSentToCustomerAt sets the "sent_to_customer_at" field if the given value is not nil. +func (bic *BillingInvoiceCreate) SetNillableSentToCustomerAt(t *time.Time) *BillingInvoiceCreate { + if t != nil { + bic.SetSentToCustomerAt(*t) + } + return bic +} + // SetDraftUntil sets the "draft_until" field. func (bic *BillingInvoiceCreate) SetDraftUntil(t time.Time) *BillingInvoiceCreate { bic.mutation.SetDraftUntil(t) @@ -1027,6 +1041,10 @@ func (bic *BillingInvoiceCreate) createSpec() (*BillingInvoice, *sqlgraph.Create _spec.SetField(billinginvoice.FieldIssuedAt, field.TypeTime, value) _node.IssuedAt = &value } + if value, ok := bic.mutation.SentToCustomerAt(); ok { + _spec.SetField(billinginvoice.FieldSentToCustomerAt, field.TypeTime, value) + _node.SentToCustomerAt = &value + } if value, ok := bic.mutation.DraftUntil(); ok { _spec.SetField(billinginvoice.FieldDraftUntil, field.TypeTime, value) _node.DraftUntil = &value @@ -1781,6 +1799,24 @@ func (u *BillingInvoiceUpsert) ClearIssuedAt() *BillingInvoiceUpsert { return u } +// SetSentToCustomerAt sets the "sent_to_customer_at" field. +func (u *BillingInvoiceUpsert) SetSentToCustomerAt(v time.Time) *BillingInvoiceUpsert { + u.Set(billinginvoice.FieldSentToCustomerAt, v) + return u +} + +// UpdateSentToCustomerAt sets the "sent_to_customer_at" field to the value that was provided on create. +func (u *BillingInvoiceUpsert) UpdateSentToCustomerAt() *BillingInvoiceUpsert { + u.SetExcluded(billinginvoice.FieldSentToCustomerAt) + return u +} + +// ClearSentToCustomerAt clears the value of the "sent_to_customer_at" field. +func (u *BillingInvoiceUpsert) ClearSentToCustomerAt() *BillingInvoiceUpsert { + u.SetNull(billinginvoice.FieldSentToCustomerAt) + return u +} + // SetDraftUntil sets the "draft_until" field. func (u *BillingInvoiceUpsert) SetDraftUntil(v time.Time) *BillingInvoiceUpsert { u.Set(billinginvoice.FieldDraftUntil, v) @@ -2605,6 +2641,27 @@ func (u *BillingInvoiceUpsertOne) ClearIssuedAt() *BillingInvoiceUpsertOne { }) } +// SetSentToCustomerAt sets the "sent_to_customer_at" field. +func (u *BillingInvoiceUpsertOne) SetSentToCustomerAt(v time.Time) *BillingInvoiceUpsertOne { + return u.Update(func(s *BillingInvoiceUpsert) { + s.SetSentToCustomerAt(v) + }) +} + +// UpdateSentToCustomerAt sets the "sent_to_customer_at" field to the value that was provided on create. +func (u *BillingInvoiceUpsertOne) UpdateSentToCustomerAt() *BillingInvoiceUpsertOne { + return u.Update(func(s *BillingInvoiceUpsert) { + s.UpdateSentToCustomerAt() + }) +} + +// ClearSentToCustomerAt clears the value of the "sent_to_customer_at" field. +func (u *BillingInvoiceUpsertOne) ClearSentToCustomerAt() *BillingInvoiceUpsertOne { + return u.Update(func(s *BillingInvoiceUpsert) { + s.ClearSentToCustomerAt() + }) +} + // SetDraftUntil sets the "draft_until" field. func (u *BillingInvoiceUpsertOne) SetDraftUntil(v time.Time) *BillingInvoiceUpsertOne { return u.Update(func(s *BillingInvoiceUpsert) { @@ -3621,6 +3678,27 @@ func (u *BillingInvoiceUpsertBulk) ClearIssuedAt() *BillingInvoiceUpsertBulk { }) } +// SetSentToCustomerAt sets the "sent_to_customer_at" field. +func (u *BillingInvoiceUpsertBulk) SetSentToCustomerAt(v time.Time) *BillingInvoiceUpsertBulk { + return u.Update(func(s *BillingInvoiceUpsert) { + s.SetSentToCustomerAt(v) + }) +} + +// UpdateSentToCustomerAt sets the "sent_to_customer_at" field to the value that was provided on create. +func (u *BillingInvoiceUpsertBulk) UpdateSentToCustomerAt() *BillingInvoiceUpsertBulk { + return u.Update(func(s *BillingInvoiceUpsert) { + s.UpdateSentToCustomerAt() + }) +} + +// ClearSentToCustomerAt clears the value of the "sent_to_customer_at" field. +func (u *BillingInvoiceUpsertBulk) ClearSentToCustomerAt() *BillingInvoiceUpsertBulk { + return u.Update(func(s *BillingInvoiceUpsert) { + s.ClearSentToCustomerAt() + }) +} + // SetDraftUntil sets the "draft_until" field. func (u *BillingInvoiceUpsertBulk) SetDraftUntil(v time.Time) *BillingInvoiceUpsertBulk { return u.Update(func(s *BillingInvoiceUpsert) { diff --git a/openmeter/ent/db/billinginvoice_update.go b/openmeter/ent/db/billinginvoice_update.go index 02b3ff97a..a61a36235 100644 --- a/openmeter/ent/db/billinginvoice_update.go +++ b/openmeter/ent/db/billinginvoice_update.go @@ -593,6 +593,26 @@ func (biu *BillingInvoiceUpdate) ClearIssuedAt() *BillingInvoiceUpdate { return biu } +// SetSentToCustomerAt sets the "sent_to_customer_at" field. +func (biu *BillingInvoiceUpdate) SetSentToCustomerAt(t time.Time) *BillingInvoiceUpdate { + biu.mutation.SetSentToCustomerAt(t) + return biu +} + +// SetNillableSentToCustomerAt sets the "sent_to_customer_at" field if the given value is not nil. +func (biu *BillingInvoiceUpdate) SetNillableSentToCustomerAt(t *time.Time) *BillingInvoiceUpdate { + if t != nil { + biu.SetSentToCustomerAt(*t) + } + return biu +} + +// ClearSentToCustomerAt clears the value of the "sent_to_customer_at" field. +func (biu *BillingInvoiceUpdate) ClearSentToCustomerAt() *BillingInvoiceUpdate { + biu.mutation.ClearSentToCustomerAt() + return biu +} + // SetDraftUntil sets the "draft_until" field. func (biu *BillingInvoiceUpdate) SetDraftUntil(t time.Time) *BillingInvoiceUpdate { biu.mutation.SetDraftUntil(t) @@ -1151,6 +1171,12 @@ func (biu *BillingInvoiceUpdate) sqlSave(ctx context.Context) (n int, err error) if biu.mutation.IssuedAtCleared() { _spec.ClearField(billinginvoice.FieldIssuedAt, field.TypeTime) } + if value, ok := biu.mutation.SentToCustomerAt(); ok { + _spec.SetField(billinginvoice.FieldSentToCustomerAt, field.TypeTime, value) + } + if biu.mutation.SentToCustomerAtCleared() { + _spec.ClearField(billinginvoice.FieldSentToCustomerAt, field.TypeTime) + } if value, ok := biu.mutation.DraftUntil(); ok { _spec.SetField(billinginvoice.FieldDraftUntil, field.TypeTime, value) } @@ -1938,6 +1964,26 @@ func (biuo *BillingInvoiceUpdateOne) ClearIssuedAt() *BillingInvoiceUpdateOne { return biuo } +// SetSentToCustomerAt sets the "sent_to_customer_at" field. +func (biuo *BillingInvoiceUpdateOne) SetSentToCustomerAt(t time.Time) *BillingInvoiceUpdateOne { + biuo.mutation.SetSentToCustomerAt(t) + return biuo +} + +// SetNillableSentToCustomerAt sets the "sent_to_customer_at" field if the given value is not nil. +func (biuo *BillingInvoiceUpdateOne) SetNillableSentToCustomerAt(t *time.Time) *BillingInvoiceUpdateOne { + if t != nil { + biuo.SetSentToCustomerAt(*t) + } + return biuo +} + +// ClearSentToCustomerAt clears the value of the "sent_to_customer_at" field. +func (biuo *BillingInvoiceUpdateOne) ClearSentToCustomerAt() *BillingInvoiceUpdateOne { + biuo.mutation.ClearSentToCustomerAt() + return biuo +} + // SetDraftUntil sets the "draft_until" field. func (biuo *BillingInvoiceUpdateOne) SetDraftUntil(t time.Time) *BillingInvoiceUpdateOne { biuo.mutation.SetDraftUntil(t) @@ -2526,6 +2572,12 @@ func (biuo *BillingInvoiceUpdateOne) sqlSave(ctx context.Context) (_node *Billin if biuo.mutation.IssuedAtCleared() { _spec.ClearField(billinginvoice.FieldIssuedAt, field.TypeTime) } + if value, ok := biuo.mutation.SentToCustomerAt(); ok { + _spec.SetField(billinginvoice.FieldSentToCustomerAt, field.TypeTime, value) + } + if biuo.mutation.SentToCustomerAtCleared() { + _spec.ClearField(billinginvoice.FieldSentToCustomerAt, field.TypeTime) + } if value, ok := biuo.mutation.DraftUntil(); ok { _spec.SetField(billinginvoice.FieldDraftUntil, field.TypeTime, value) } diff --git a/openmeter/ent/db/migrate/schema.go b/openmeter/ent/db/migrate/schema.go index 3efc395cb..feb2ee2cc 100644 --- a/openmeter/ent/db/migrate/schema.go +++ b/openmeter/ent/db/migrate/schema.go @@ -341,6 +341,7 @@ var ( {Name: "description", Type: field.TypeString, Nullable: true}, {Name: "voided_at", Type: field.TypeTime, Nullable: true}, {Name: "issued_at", Type: field.TypeTime, Nullable: true}, + {Name: "sent_to_customer_at", Type: field.TypeTime, Nullable: true}, {Name: "draft_until", Type: field.TypeTime, Nullable: true}, {Name: "currency", Type: field.TypeString, SchemaType: map[string]string{"postgres": "varchar(3)"}}, {Name: "due_at", Type: field.TypeTime, Nullable: true}, @@ -365,37 +366,37 @@ var ( ForeignKeys: []*schema.ForeignKey{ { Symbol: "billing_invoices_apps_billing_invoice_tax_app", - Columns: []*schema.Column{BillingInvoicesColumns[45]}, + Columns: []*schema.Column{BillingInvoicesColumns[46]}, RefColumns: []*schema.Column{AppsColumns[0]}, OnDelete: schema.NoAction, }, { Symbol: "billing_invoices_apps_billing_invoice_invoicing_app", - Columns: []*schema.Column{BillingInvoicesColumns[46]}, + Columns: []*schema.Column{BillingInvoicesColumns[47]}, RefColumns: []*schema.Column{AppsColumns[0]}, OnDelete: schema.NoAction, }, { Symbol: "billing_invoices_apps_billing_invoice_payment_app", - Columns: []*schema.Column{BillingInvoicesColumns[47]}, + Columns: []*schema.Column{BillingInvoicesColumns[48]}, RefColumns: []*schema.Column{AppsColumns[0]}, OnDelete: schema.NoAction, }, { Symbol: "billing_invoices_billing_profiles_billing_invoices", - Columns: []*schema.Column{BillingInvoicesColumns[48]}, + Columns: []*schema.Column{BillingInvoicesColumns[49]}, RefColumns: []*schema.Column{BillingProfilesColumns[0]}, OnDelete: schema.NoAction, }, { Symbol: "billing_invoices_billing_workflow_configs_billing_invoices", - Columns: []*schema.Column{BillingInvoicesColumns[49]}, + Columns: []*schema.Column{BillingInvoicesColumns[50]}, RefColumns: []*schema.Column{BillingWorkflowConfigsColumns[0]}, OnDelete: schema.NoAction, }, { Symbol: "billing_invoices_customers_billing_invoice", - Columns: []*schema.Column{BillingInvoicesColumns[50]}, + Columns: []*schema.Column{BillingInvoicesColumns[51]}, RefColumns: []*schema.Column{CustomersColumns[0]}, OnDelete: schema.NoAction, }, @@ -419,7 +420,7 @@ var ( { Name: "billinginvoice_namespace_customer_id", Unique: false, - Columns: []*schema.Column{BillingInvoicesColumns[1], BillingInvoicesColumns[50]}, + Columns: []*schema.Column{BillingInvoicesColumns[1], BillingInvoicesColumns[51]}, }, }, } diff --git a/openmeter/ent/db/mutation.go b/openmeter/ent/db/mutation.go index 87d250a70..0dbc0c96a 100644 --- a/openmeter/ent/db/mutation.go +++ b/openmeter/ent/db/mutation.go @@ -6366,6 +6366,7 @@ type BillingInvoiceMutation struct { description *string voided_at *time.Time issued_at *time.Time + sent_to_customer_at *time.Time draft_until *time.Time currency *currencyx.Code due_at *time.Time @@ -8098,6 +8099,55 @@ func (m *BillingInvoiceMutation) ResetIssuedAt() { delete(m.clearedFields, billinginvoice.FieldIssuedAt) } +// SetSentToCustomerAt sets the "sent_to_customer_at" field. +func (m *BillingInvoiceMutation) SetSentToCustomerAt(t time.Time) { + m.sent_to_customer_at = &t +} + +// SentToCustomerAt returns the value of the "sent_to_customer_at" field in the mutation. +func (m *BillingInvoiceMutation) SentToCustomerAt() (r time.Time, exists bool) { + v := m.sent_to_customer_at + if v == nil { + return + } + return *v, true +} + +// OldSentToCustomerAt returns the old "sent_to_customer_at" field's value of the BillingInvoice entity. +// If the BillingInvoice object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *BillingInvoiceMutation) OldSentToCustomerAt(ctx context.Context) (v *time.Time, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldSentToCustomerAt is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldSentToCustomerAt requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldSentToCustomerAt: %w", err) + } + return oldValue.SentToCustomerAt, nil +} + +// ClearSentToCustomerAt clears the value of the "sent_to_customer_at" field. +func (m *BillingInvoiceMutation) ClearSentToCustomerAt() { + m.sent_to_customer_at = nil + m.clearedFields[billinginvoice.FieldSentToCustomerAt] = struct{}{} +} + +// SentToCustomerAtCleared returns if the "sent_to_customer_at" field was cleared in this mutation. +func (m *BillingInvoiceMutation) SentToCustomerAtCleared() bool { + _, ok := m.clearedFields[billinginvoice.FieldSentToCustomerAt] + return ok +} + +// ResetSentToCustomerAt resets all changes to the "sent_to_customer_at" field. +func (m *BillingInvoiceMutation) ResetSentToCustomerAt() { + m.sent_to_customer_at = nil + delete(m.clearedFields, billinginvoice.FieldSentToCustomerAt) +} + // SetDraftUntil sets the "draft_until" field. func (m *BillingInvoiceMutation) SetDraftUntil(t time.Time) { m.draft_until = &t @@ -9041,7 +9091,7 @@ func (m *BillingInvoiceMutation) Type() string { // order to get all numeric fields that were incremented/decremented, call // AddedFields(). func (m *BillingInvoiceMutation) Fields() []string { - fields := make([]string, 0, 50) + fields := make([]string, 0, 51) if m.namespace != nil { fields = append(fields, billinginvoice.FieldNamespace) } @@ -9153,6 +9203,9 @@ func (m *BillingInvoiceMutation) Fields() []string { if m.issued_at != nil { fields = append(fields, billinginvoice.FieldIssuedAt) } + if m.sent_to_customer_at != nil { + fields = append(fields, billinginvoice.FieldSentToCustomerAt) + } if m.draft_until != nil { fields = append(fields, billinginvoice.FieldDraftUntil) } @@ -9274,6 +9327,8 @@ func (m *BillingInvoiceMutation) Field(name string) (ent.Value, bool) { return m.VoidedAt() case billinginvoice.FieldIssuedAt: return m.IssuedAt() + case billinginvoice.FieldSentToCustomerAt: + return m.SentToCustomerAt() case billinginvoice.FieldDraftUntil: return m.DraftUntil() case billinginvoice.FieldCurrency: @@ -9383,6 +9438,8 @@ func (m *BillingInvoiceMutation) OldField(ctx context.Context, name string) (ent return m.OldVoidedAt(ctx) case billinginvoice.FieldIssuedAt: return m.OldIssuedAt(ctx) + case billinginvoice.FieldSentToCustomerAt: + return m.OldSentToCustomerAt(ctx) case billinginvoice.FieldDraftUntil: return m.OldDraftUntil(ctx) case billinginvoice.FieldCurrency: @@ -9677,6 +9734,13 @@ func (m *BillingInvoiceMutation) SetField(name string, value ent.Value) error { } m.SetIssuedAt(v) return nil + case billinginvoice.FieldSentToCustomerAt: + v, ok := value.(time.Time) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetSentToCustomerAt(v) + return nil case billinginvoice.FieldDraftUntil: v, ok := value.(time.Time) if !ok { @@ -9858,6 +9922,9 @@ func (m *BillingInvoiceMutation) ClearedFields() []string { if m.FieldCleared(billinginvoice.FieldIssuedAt) { fields = append(fields, billinginvoice.FieldIssuedAt) } + if m.FieldCleared(billinginvoice.FieldSentToCustomerAt) { + fields = append(fields, billinginvoice.FieldSentToCustomerAt) + } if m.FieldCleared(billinginvoice.FieldDraftUntil) { fields = append(fields, billinginvoice.FieldDraftUntil) } @@ -9953,6 +10020,9 @@ func (m *BillingInvoiceMutation) ClearField(name string) error { case billinginvoice.FieldIssuedAt: m.ClearIssuedAt() return nil + case billinginvoice.FieldSentToCustomerAt: + m.ClearSentToCustomerAt() + return nil case billinginvoice.FieldDraftUntil: m.ClearDraftUntil() return nil @@ -10093,6 +10163,9 @@ func (m *BillingInvoiceMutation) ResetField(name string) error { case billinginvoice.FieldIssuedAt: m.ResetIssuedAt() return nil + case billinginvoice.FieldSentToCustomerAt: + m.ResetSentToCustomerAt() + return nil case billinginvoice.FieldDraftUntil: m.ResetDraftUntil() return nil diff --git a/openmeter/ent/db/runtime.go b/openmeter/ent/db/runtime.go index 5313550b1..46414db11 100644 --- a/openmeter/ent/db/runtime.go +++ b/openmeter/ent/db/runtime.go @@ -304,11 +304,11 @@ func init() { // billinginvoice.SourceBillingProfileIDValidator is a validator for the "source_billing_profile_id" field. It is called by the builders before save. billinginvoice.SourceBillingProfileIDValidator = billinginvoiceDescSourceBillingProfileID.Validators[0].(func(string) error) // billinginvoiceDescCurrency is the schema descriptor for currency field. - billinginvoiceDescCurrency := billinginvoiceFields[12].Descriptor() + billinginvoiceDescCurrency := billinginvoiceFields[13].Descriptor() // billinginvoice.CurrencyValidator is a validator for the "currency" field. It is called by the builders before save. billinginvoice.CurrencyValidator = billinginvoiceDescCurrency.Validators[0].(func(string) error) // billinginvoiceDescCollectionAt is the schema descriptor for collection_at field. - billinginvoiceDescCollectionAt := billinginvoiceFields[23].Descriptor() + billinginvoiceDescCollectionAt := billinginvoiceFields[24].Descriptor() // billinginvoice.DefaultCollectionAt holds the default value on creation for the collection_at field. billinginvoice.DefaultCollectionAt = billinginvoiceDescCollectionAt.Default.(func() time.Time) // billinginvoiceDescID is the schema descriptor for id field. diff --git a/openmeter/ent/db/setorclear.go b/openmeter/ent/db/setorclear.go index 5ab19ac73..e3bbdf694 100644 --- a/openmeter/ent/db/setorclear.go +++ b/openmeter/ent/db/setorclear.go @@ -545,6 +545,20 @@ func (u *BillingInvoiceUpdateOne) SetOrClearIssuedAt(value *time.Time) *BillingI return u.SetIssuedAt(*value) } +func (u *BillingInvoiceUpdate) SetOrClearSentToCustomerAt(value *time.Time) *BillingInvoiceUpdate { + if value == nil { + return u.ClearSentToCustomerAt() + } + return u.SetSentToCustomerAt(*value) +} + +func (u *BillingInvoiceUpdateOne) SetOrClearSentToCustomerAt(value *time.Time) *BillingInvoiceUpdateOne { + if value == nil { + return u.ClearSentToCustomerAt() + } + return u.SetSentToCustomerAt(*value) +} + func (u *BillingInvoiceUpdate) SetOrClearDraftUntil(value *time.Time) *BillingInvoiceUpdate { if value == nil { return u.ClearDraftUntil() diff --git a/openmeter/ent/schema/billing.go b/openmeter/ent/schema/billing.go index 727a672fc..f9a1c367a 100644 --- a/openmeter/ent/schema/billing.go +++ b/openmeter/ent/schema/billing.go @@ -657,6 +657,10 @@ func (BillingInvoice) Fields() []ent.Field { Optional(). Nillable(), + field.Time("sent_to_customer_at"). + Optional(). + Nillable(), + field.Time("draft_until"). Optional(). Nillable(), diff --git a/tools/migrate/migrations/20250131125127_billing-sent-to-customer-at.down.sql b/tools/migrate/migrations/20250131125127_billing-sent-to-customer-at.down.sql new file mode 100644 index 000000000..5d2b315dd --- /dev/null +++ b/tools/migrate/migrations/20250131125127_billing-sent-to-customer-at.down.sql @@ -0,0 +1,2 @@ +-- reverse: modify "billing_invoices" table +ALTER TABLE "billing_invoices" DROP COLUMN "sent_to_customer_at"; diff --git a/tools/migrate/migrations/20250131125127_billing-sent-to-customer-at.up.sql b/tools/migrate/migrations/20250131125127_billing-sent-to-customer-at.up.sql new file mode 100644 index 000000000..6bb7bbf62 --- /dev/null +++ b/tools/migrate/migrations/20250131125127_billing-sent-to-customer-at.up.sql @@ -0,0 +1,2 @@ +-- modify "billing_invoices" table +ALTER TABLE "billing_invoices" ADD COLUMN "sent_to_customer_at" timestamptz NULL; diff --git a/tools/migrate/migrations/atlas.sum b/tools/migrate/migrations/atlas.sum index 599637b7e..7fb6da409 100644 --- a/tools/migrate/migrations/atlas.sum +++ b/tools/migrate/migrations/atlas.sum @@ -1,4 +1,4 @@ -h1:9DbhA33Jedp6TYi1OJm0ZSZ7CJayJ6dpdH3v863LDc8= +h1:PjFwEMwcwswBHQE+alWSvuKvvpLsyoHSSQCZgjJmxhI= 20240826120919_init.down.sql h1:AIbgwwngjkJEYa3yRZsIXQyBa2+qoZttwMXHxXEbHLI= 20240826120919_init.up.sql h1:/hYHWF3Z3dab8SMKnw99ixVktCuJe2bAw5wstCZIEN8= 20240903155435_entitlement-expired-index.down.sql h1:np2xgYs3KQ2z7qPBcobtGNhqWQ3V8NwEP9E5U3TmpSA= @@ -99,3 +99,5 @@ h1:9DbhA33Jedp6TYi1OJm0ZSZ7CJayJ6dpdH3v863LDc8= 20250130034713_customer_key.up.sql h1:LtrvvubvX4sXpF8wx7fIJttl+VU9/Ty60U6vMCTbEcE= 20250130104722_billing-collection-at.down.sql h1:Ht57GJ6r7GoWOltIlBD1odtOzOV1+LG7+pOsrZeFgS8= 20250130104722_billing-collection-at.up.sql h1:UdFm8gNeXxTPNfxTMbHpgOFo+Ow7rHCOw4sXKYp83aU= +20250131125127_billing-sent-to-customer-at.down.sql h1:qMCLQ4L1aaJyo1OI1Fzc1sA1VqVLngqkLD8B/8420rM= +20250131125127_billing-sent-to-customer-at.up.sql h1:stYsgGQaZyVQyNuAGiR2gXJ6t8GzO0DnYKW0YDVdTbQ=