openapi: 3.1.0 info: contact: email: support@konghq.com name: Kong Inc url: https://konghq.com description: 'OpenAPI 3.0 spec for Kong Gateway''s Admin API. You can learn more about Kong Gateway at [developer.konghq.com](https://developer.konghq.com). Give Kong a star at the [Kong/kong](https://github.com/kong/kong) repository.' license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html title: Kong Enterprise Admin ACLs Meters API version: 3.14.0 servers: - description: Default Admin API URL url: '{protocol}://{hostname}:{port}{path}' variables: hostname: default: localhost description: Hostname for Kong's Admin API path: default: / description: Base path for Kong's Admin API port: default: '8001' description: Port for Kong's Admin API protocol: default: http description: Protocol for requests to Kong's Admin API enum: - http - https security: - adminToken: [] tags: - name: Meters description: Meters specify how to aggregate events for billing and analytics purposes. Meters can be configured with multiple aggregation methods and groupings. Multiple meters can be created for the same event type, enabling flexible metering scenarios. paths: /v3/openmeter/meters: post: operationId: create-meter summary: Create meter description: Create a meter. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateMeterRequest' responses: '201': description: Meter created response. content: application/json: schema: $ref: '#/components/schemas/Meter' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' tags: - Meters get: operationId: list-meters summary: List meters description: List meters. parameters: - $ref: '#/components/parameters/PagePaginationQuery' - name: sort in: query description: 'Sort meters returned in the response. Supported sort attributes are: - `key` - `name` - `aggregation` - `createdAt` (default) - `updatedAt` The `asc` suffix is optional as the default sort order is ascending. The `desc` suffix is used to specify a descending order.' required: false schema: $ref: '#/components/schemas/SortQuery' explode: false style: form - name: filter in: query description: 'Filter meters returned in the response. To filter meters by key add the following query param: filter[key]=my-meter-key' required: false schema: $ref: '#/components/schemas/ListMetersParamsFilter' style: deepObject responses: '200': description: Page paginated response. content: application/json: schema: $ref: '#/components/schemas/MeterPagePaginatedResponse' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' tags: - Meters /v3/openmeter/meters/{meterId}: get: operationId: get-meter summary: Get meter description: Get a meter by ID. parameters: - name: meterId in: path required: true schema: $ref: '#/components/schemas/ULID' responses: '200': description: Meter response. content: application/json: schema: $ref: '#/components/schemas/Meter' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' tags: - Meters delete: operationId: delete-meter summary: Delete meter description: Delete a meter. parameters: - name: meterId in: path required: true schema: $ref: '#/components/schemas/ULID' responses: '204': description: Deleted response. '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' tags: - Meters components: schemas: InvalidParameterMinimumLength: type: object properties: field: type: string example: name readOnly: true rule: description: invalid parameters rules type: string enum: - min_length - min_digits - min_lowercase - min_uppercase - min_symbols - min_items - min nullable: false readOnly: true x-speakeasy-unknown-values: allow minimum: type: integer example: 8 source: type: string example: body reason: type: string example: must have at least 8 characters readOnly: true additionalProperties: false required: - field - reason - rule - minimum ListMetersParamsFilter: description: Filter options for listing meters. type: object properties: key: description: Filter meters by key. type: object additionalProperties: false properties: eq: type: string contains: type: string ocontains: type: string oeq: type: string neq: type: string required: - contains - ocontains - oeq - neq title: StringFieldNEQFilter name: description: Filter meters by name. type: object additionalProperties: false properties: eq: type: string contains: type: string ocontains: type: string oeq: type: string neq: type: string required: - contains - ocontains - oeq - neq title: StringFieldNEQFilter InvalidParameterChoiceItem: type: object properties: field: type: string example: name readOnly: true rule: description: invalid parameters rules type: string enum: - enum nullable: false readOnly: true reason: type: string example: is a required field readOnly: true choices: type: array items: {} minItems: 1 nullable: false readOnly: true uniqueItems: true source: type: string example: body additionalProperties: false required: - field - reason - rule - choices ResourceKey: description: A key is a unique string that is used to identify a resource. type: string example: resource_key maxLength: 64 minLength: 1 pattern: ^[a-z0-9]+(?:_[a-z0-9]+)*$ title: Resource Key InvalidParameterMaximumLength: type: object properties: field: type: string example: name readOnly: true rule: description: invalid parameters rules type: string enum: - max_length - max_items - max nullable: false readOnly: true x-speakeasy-unknown-values: allow maximum: type: integer example: 8 source: type: string example: body reason: type: string example: must not have more than 8 characters readOnly: true additionalProperties: false required: - field - reason - rule - maximum CreateMeterRequest: description: Meter create request. type: object properties: name: description: 'Display name of the resource. Between 1 and 256 characters.' type: string maxLength: 256 minLength: 1 description: description: 'Optional description of the resource. Maximum 1024 characters.' type: string maxLength: 1024 labels: $ref: '#/components/schemas/Labels' key: $ref: '#/components/schemas/ResourceKey' aggregation: description: The aggregation type to use for the meter. type: string enum: - sum - count - unique_count - avg - min - max - latest x-speakeasy-unknown-values: allow event_type: description: The event type to include in the aggregation. type: string example: prompt minLength: 1 events_from: description: 'The date since the meter should include events. Useful to skip old events. If not specified, all historical events are included.' type: string format: date-time example: '2023-01-01T01:01:01.001Z' title: RFC3339 Date-Time value_property: description: 'JSONPath expression to extract the value from the ingested event''s data property. The ingested value for sum, avg, min, and max aggregations is a number or a string that can be parsed to a number. For unique_count aggregation, the ingested value must be a string. For count aggregation the value_property is ignored.' type: string example: $.tokens minLength: 1 dimensions: 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.' type: object example: type: $.type additionalProperties: type: string required: - name - key - aggregation - event_type Labels: description: "Labels store metadata of an entity that can be used for filtering an entity list or for searching across entity types. \n\nKeys must be of length 1-63 characters, and cannot start with \"kong\", \"konnect\", \"mesh\", \"kic\", or \"_\".\n" type: object example: env: test additionalProperties: type: string pattern: ^[a-z0-9A-Z]{1}([a-z0-9A-Z-._]*[a-z0-9A-Z]+)?$ minLength: 1 maxLength: 63 maxProperties: 50 title: Labels ForbiddenError: allOf: - $ref: '#/components/schemas/BaseError' - type: object properties: status: example: 403 title: example: Forbidden type: example: https://httpstatuses.com/403 instance: example: kong:trace:1234567890 detail: example: Forbidden UnauthorizedError: allOf: - $ref: '#/components/schemas/BaseError' - type: object properties: status: example: 401 title: example: Unauthorized type: example: https://httpstatuses.com/401 instance: example: kong:trace:1234567890 detail: example: Invalid credentials MeterPagePaginatedResponse: description: Page paginated response. type: object properties: data: type: array items: $ref: '#/components/schemas/Meter' meta: $ref: '#/components/schemas/PaginatedMeta' required: - data - meta PaginatedMeta: description: returns the pagination information type: object properties: page: $ref: '#/components/schemas/PageMeta' required: - page title: PaginatedMeta x-speakeasy-terraform-ignore: true BaseError: description: standard error type: object properties: status: description: 'The HTTP status code of the error. Useful when passing the response body to child properties in a frontend UI. Must be returned as an integer. ' type: integer readOnly: true title: description: 'A short, human-readable summary of the problem. It should not change between occurences of a problem, except for localization. Should be provided as "Sentence case" for direct use in the UI. ' type: string readOnly: true type: description: The error type. type: string readOnly: true instance: description: 'Used to return the correlation ID back to the user, in the format kong:trace:. This helps us find the relevant logs when a customer reports an issue. ' type: string readOnly: true detail: description: 'A human readable explanation specific to this occurence of the problem. This field may contain request/entity data to help the user understand what went wrong. Enclose variable values in square brackets. Should be provided as "Sentence case" for direct use in the UI. ' type: string readOnly: true required: - status - title - instance - detail title: Error InvalidParameterDependentItem: type: object properties: field: type: string example: name readOnly: true rule: description: invalid parameters rules type: string enum: - dependent_fields nullable: true readOnly: true reason: type: string example: is a required field readOnly: true dependents: type: array items: {} nullable: true readOnly: true uniqueItems: true source: type: string example: body additionalProperties: false required: - field - rule - reason - dependents SortQuery: description: 'The `asc` suffix is optional as the default sort order is ascending. The `desc` suffix is used to specify a descending order. Multiple sort attributes may be provided via a comma separated list. JSONPath notation may be used to specify a sub-attribute (eg: ''foo.bar desc''). ' type: string example: created_at desc title: SortQuery InvalidRules: description: invalid parameters rules type: string enum: - required - is_array - is_base64 - is_boolean - is_date_time - is_integer - is_null - is_number - is_object - is_string - is_uuid - is_fqdn - is_arn - unknown_property - missing_reference - is_label - matches_regex - invalid - is_supported_network_availability_zone_list - is_supported_network_cidr_block - is_supported_provider_region - type nullable: true readOnly: true x-speakeasy-unknown-values: allow InvalidParameters: description: invalid parameters type: array items: oneOf: - $ref: '#/components/schemas/InvalidParameterStandard' - $ref: '#/components/schemas/InvalidParameterMinimumLength' - $ref: '#/components/schemas/InvalidParameterMaximumLength' - $ref: '#/components/schemas/InvalidParameterChoiceItem' - $ref: '#/components/schemas/InvalidParameterDependentItem' minItems: 1 nullable: false uniqueItems: true BadRequestError: allOf: - $ref: '#/components/schemas/BaseError' - type: object required: - invalid_parameters properties: invalid_parameters: $ref: '#/components/schemas/InvalidParameters' InvalidParameterStandard: type: object properties: field: type: string example: name readOnly: true rule: $ref: '#/components/schemas/InvalidRules' source: type: string example: body reason: type: string example: is a required field readOnly: true additionalProperties: false required: - field - reason Meter: description: A meter is a configuration that defines how to match and aggregate events. type: object properties: id: description: ULID (Universally Unique Lexicographically Sortable Identifier). type: string example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Z]{25}$ readOnly: true title: ULID name: description: 'Display name of the resource. Between 1 and 256 characters.' type: string maxLength: 256 minLength: 1 description: description: 'Optional description of the resource. Maximum 1024 characters.' type: string maxLength: 1024 labels: $ref: '#/components/schemas/Labels' created_at: description: An ISO-8601 timestamp representation of entity creation date. type: string format: date-time example: '2023-01-01T01:01:01.001Z' readOnly: true title: RFC3339 Date-Time updated_at: description: An ISO-8601 timestamp representation of entity last update date. type: string format: date-time example: '2023-01-01T01:01:01.001Z' readOnly: true title: RFC3339 Date-Time deleted_at: description: An ISO-8601 timestamp representation of entity deletion date. type: string format: date-time example: '2023-01-01T01:01:01.001Z' readOnly: true title: RFC3339 Date-Time key: $ref: '#/components/schemas/ResourceKey' aggregation: description: The aggregation type to use for the meter. type: string enum: - sum - count - unique_count - avg - min - max - latest x-speakeasy-unknown-values: allow event_type: description: The event type to include in the aggregation. type: string example: prompt minLength: 1 events_from: description: 'The date since the meter should include events. Useful to skip old events. If not specified, all historical events are included.' type: string format: date-time example: '2023-01-01T01:01:01.001Z' title: RFC3339 Date-Time value_property: description: 'JSONPath expression to extract the value from the ingested event''s data property. The ingested value for sum, avg, min, and max aggregations is a number or a string that can be parsed to a number. For unique_count aggregation, the ingested value must be a string. For count aggregation the value_property is ignored.' type: string example: $.tokens minLength: 1 dimensions: 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.' type: object example: type: $.type additionalProperties: type: string example: id: 01G65Z755AFWAKHE12NY0CQ9FH key: tokens_total name: Tokens Total description: AI Token Usage aggregation: sum event_type: prompt value_property: $.tokens dimensions: model: $.model type: $.type created_at: '2024-01-01T01:01:01.001Z' updated_at: '2024-01-01T01:01:01.001Z' required: - id - name - created_at - updated_at - key - aggregation - event_type ULID: description: ULID (Universally Unique Lexicographically Sortable Identifier). type: string example: 01G65Z755AFWAKHE12NY0CQ9FH pattern: ^[0-7][0-9A-HJKMNP-TV-Z]{25}$ title: ULID PageMeta: description: Contains pagination query parameters and the total number of objects returned. type: object properties: number: type: number example: 1 x-speakeasy-terraform-ignore: true size: type: number example: 10 x-speakeasy-terraform-ignore: true total: type: number example: 100 x-speakeasy-terraform-ignore: true required: - number - size - total NotFoundError: allOf: - $ref: '#/components/schemas/BaseError' - type: object properties: status: example: 404 title: example: Not Found type: example: https://httpstatuses.com/404 instance: example: kong:trace:1234567890 detail: example: Not found responses: BadRequest: description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/BadRequestError' NotFound: description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/NotFoundError' Unauthorized: description: Unauthorized content: application/problem+json: schema: description: The error response object. type: object properties: status: description: The HTTP status code. type: integer example: 403 title: description: The Error Response. type: string example: Unauthorized instance: description: The Konnect traceback code. type: string example: konnect:trace:952172606039454040 detail: description: Details about the error response. type: string example: You do not have permission to perform this action $ref: '#/components/schemas/UnauthorizedError' title: Unauthorized Response Forbidden: description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ForbiddenError' parameters: PagePaginationQuery: name: page in: query required: false description: Determines which page of the collection to retrieve. schema: type: object properties: size: description: The number of items to include per page. type: integer number: description: The page number. type: integer style: deepObject securitySchemes: adminToken: in: header name: Kong-Admin-Token type: apiKey externalDocs: description: Documentation for Kong Gateway and its APIs url: https://developer.konghq.com