Togai Usage Meters API

Usage Meter level calls

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/togai-usage-meters-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

togai-usage-meters-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  version: '1.0'
  title: Togai Apis Accounts Usage Meters API
  contact:
    email: engg@togai.com
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
  description: APIs for Togai App
servers:
- description: Api endpoint
  url: https://api.togai.com/
- description: Sandbox api endpoint
  url: https://sandbox-api.togai.com/
security:
- bearerAuth: []
tags:
- name: Usage Meters
  description: Usage Meter level calls
paths:
  /usage_meters:
    post:
      tags:
      - Usage Meters
      summary: Create an Usage Meter
      description: Create an usage meter and associate with an event schema
      operationId: createUsageMeter
      requestBody:
        $ref: '#/components/requestBodies/CreateUsageMeterRequest'
      responses:
        '201':
          $ref: '#/components/responses/UsageMeterResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '403':
          $ref: '#/components/responses/ErrorResponse'
        '404':
          $ref: '#/components/responses/ErrorResponse'
        '429':
          $ref: '#/components/responses/ErrorResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
    get:
      tags:
      - Usage Meters
      summary: List Usage Meters for Event Schema
      description: Get a list of usage meters associated with an event schema
      operationId: getUsageMetersForEventSchema
      parameters:
      - name: status
        description: 'Filter by status

          '
        in: query
        required: false
        schema:
          type: string
          enum:
          - ACTIVE
          - INACTIVE
      - name: aggregations
        description: 'Filter by aggregations

          '
        in: query
        required: false
        schema:
          type: string
          enum:
          - COUNT
          - SUM
      - $ref: '#/components/parameters/next_token'
      - $ref: '#/components/parameters/page_size'
      responses:
        '200':
          $ref: '#/components/responses/UsageMeterPaginatedResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '403':
          $ref: '#/components/responses/ErrorResponse'
        '404':
          $ref: '#/components/responses/ErrorResponse'
        '429':
          $ref: '#/components/responses/ErrorResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
  /usage_meters/{usage_meter_id}:
    get:
      tags:
      - Usage Meters
      summary: Get Usage Meter
      description: Get an usage meter using event schema name and usage meter id.
      operationId: getUsageMeter
      parameters:
      - $ref: '#/components/parameters/usage_meter_id'
      responses:
        '200':
          $ref: '#/components/responses/UsageMeterResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '403':
          $ref: '#/components/responses/ErrorResponse'
        '404':
          $ref: '#/components/responses/ErrorResponse'
        '429':
          $ref: '#/components/responses/ErrorResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
    patch:
      tags:
      - Usage Meters
      summary: Update an Usage Meter
      description: This API lets you update an existing usage meter.
      operationId: updateUsageMeter
      parameters:
      - $ref: '#/components/parameters/usage_meter_id'
      requestBody:
        $ref: '#/components/requestBodies/UpdateUsageMeterRequest'
      responses:
        '200':
          $ref: '#/components/responses/UsageMeterResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '403':
          $ref: '#/components/responses/ErrorResponse'
        '404':
          $ref: '#/components/responses/ErrorResponse'
        '429':
          $ref: '#/components/responses/ErrorResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
    delete:
      tags:
      - Usage Meters
      summary: Delete an Usage Meter
      description: Delete an Usage Meter
      operationId: deleteUsageMeter
      parameters:
      - $ref: '#/components/parameters/usage_meter_id'
      responses:
        '200':
          $ref: '#/components/responses/BaseSuccessResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '403':
          $ref: '#/components/responses/ErrorResponse'
        '404':
          $ref: '#/components/responses/ErrorResponse'
        '429':
          $ref: '#/components/responses/ErrorResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
  /usage_meters/{usage_meter_id}/activate:
    post:
      tags:
      - Usage Meters
      summary: Activate Usage Meter
      description: Activate usage meter
      operationId: activateUsageMeter
      parameters:
      - $ref: '#/components/parameters/usage_meter_id'
      responses:
        '200':
          $ref: '#/components/responses/UsageMeterResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '403':
          $ref: '#/components/responses/ErrorResponse'
        '404':
          $ref: '#/components/responses/ErrorResponse'
        '429':
          $ref: '#/components/responses/ErrorResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
  /usage_meters/{usage_meter_id}/deactivate:
    post:
      tags:
      - Usage Meters
      summary: Deactivate Usage Meter
      description: 'Make an existing active usage meter to be inactive

        Active Usage Meters with active Pricing Plan attached can also be deactivated.

        '
      operationId: deactivateUsageMeter
      parameters:
      - $ref: '#/components/parameters/usage_meter_id'
      responses:
        '200':
          $ref: '#/components/responses/UsageMeterResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '403':
          $ref: '#/components/responses/ErrorResponse'
        '404':
          $ref: '#/components/responses/ErrorResponse'
        '429':
          $ref: '#/components/responses/ErrorResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
components:
  schemas:
    UsageMeterFilterEntry:
      description: Filter entry with field and value
      type: object
      required:
      - field
      - value
      properties:
        field:
          type: string
        value:
          type: string
    UpdateUsageMeterRequest:
      description: Request to update usage meter
      type: object
      additionalProperties: false
      properties:
        name:
          description: Name of usage meter.
          type: string
          maxLength: 255
        billableName:
          description: Billable name of usage meter. Billable name takes precedence over name to display in invoice.
          type: string
          maxLength: 255
        description:
          description: Description of the usage meter
          type: string
          maxLength: 255
        eventSchemaName:
          description: Event Schema Identifier
          type: string
        type:
          description: 'Type of usage meter

            * COUNTER - Count usage

            '
          type: string
          enum:
          - COUNTER
          example: COUNTER
        aggregation:
          $ref: '#/components/schemas/UsageMeterAggregation'
        computations:
          type: array
          items:
            $ref: '#/components/schemas/Computation'
        filters:
          type: array
          items:
            $ref: '#/components/schemas/UsageMeterFilterEntry'
    CreateUsageMeterRequest:
      description: Request to create usage meter
      type: object
      additionalProperties: false
      required:
      - name
      - type
      - aggregation
      properties:
        name:
          description: Name of the usage meter. Must be unique for an organization.
          type: string
          maxLength: 50
          pattern: ^[\sa-zA-Z0-9_-]*$
        billableName:
          description: Billable name of usage meter. Billable name takes precedence over name to display in invoice.
          type: string
          maxLength: 255
        description:
          description: Description of the usage meter
          type: string
          maxLength: 255
        filters:
          description: The usage meter's applicability will be determined by comparing the filter condition agianst the events.
          type: array
          items:
            $ref: '#/components/schemas/UsageMeterFilterEntry'
        type:
          description: Type of usage meter
          type: string
          enum:
          - COUNTER
        aggregation:
          $ref: '#/components/schemas/UsageMeterAggregation'
        computations:
          type: array
          items:
            $ref: '#/components/schemas/Computation'
        eventSchemaName:
          description: Event Schema Identifier
          type: string
    UsageMeterAggregation:
      description: 'Aggregation to be applied on usage meter result

        * COUNT - Counts number of events matching the usage meter

        * SUM - Sums up results of computation of all events matching usage meter

        '
      type: string
      enum:
      - COUNT
      - SUM
    ErrorResponse:
      type: object
      additionalProperties: false
      required:
      - message
      properties:
        message:
          type: string
          description: error description
          maxLength: 500
    PaginationOptions:
      type: object
      additionalProperties: false
      properties:
        pageSize:
          type: integer
        sortOrder:
          type: string
          enum:
          - ASC
          - DESC
    UsageMeterPaginatedResponse:
      type: object
      additionalProperties: false
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/UsageMeter'
        nextToken:
          type: string
        context:
          $ref: '#/components/schemas/PaginationOptions'
    UsageMeter:
      description: Structure of usage meter
      type: object
      additionalProperties: false
      required:
      - id
      - name
      - displayName
      - type
      - aggregation
      properties:
        id:
          description: Identifier of the usage meter
          type: string
          maxLength: 20
        name:
          description: Name of the usage meter
          type: string
          maxLength: 50
          pattern: ^[\sa-zA-Z0-9_-]*$
          example: rides-usage
        billableName:
          description: Billable name of addon. Billable name takes precedence over name to display in invoice.
          type: string
          maxLength: 255
          example: Rides Usage
        displayName:
          description: 'Display name of usage meter. This is an auto-generated field which contains billableName of usage meter.

            If billableName is not provided, name will be used as display name.

            '
          type: string
          maxLength: 255
        description:
          type: string
          maxLength: 255
          example: Meter to track cab rides
        filters:
          type: array
          items:
            $ref: '#/components/schemas/UsageMeterFilterEntry'
        type:
          description: Type of usage meter
          type: string
          enum:
          - COUNTER
          example: COUNTER
        status:
          description: Status of usage meter
          type: string
          enum:
          - DRAFT
          - ACTIVE
          - INACTIVE
          - ARCHIVED
          example: DRAFT
        aggregation:
          $ref: '#/components/schemas/UsageMeterAggregation'
        computations:
          type: array
          minItems: 0
          maxItems: 1
          items:
            $ref: '#/components/schemas/Computation'
        createdAt:
          type: string
          format: date-time
        lastActivatedAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    BaseSuccessResponse:
      type: object
      additionalProperties: false
      required:
      - success
      properties:
        success:
          type: boolean
          example: true
    Computation:
      type: object
      required:
      - computation
      - order
      properties:
        id:
          description: Optional identifier describing the matcher and computation pair
          type: string
          maxLength: 50
        matcher:
          description: 'Condition to be applied on event. Upon matching it the corresponding computation will be considered for usage_meter unit calculation. The result of the matcher needs to be [truthy](https://jsonlogic.com/truthy.html) in order to be considered as a match.

            '
          type: string
          maxLength: 1500
          example: "{\n  \"and\": [\n    {\"in\": [{\"var\": \"dimension.city\"}, \"chennai\", \"mumbai\"]},\n    \"or\": [\n      {\">\": [{\"var\": \"attribute.distance\"}, 100]},\n      {\"<\": [{\"var\": \"attribute.distance\"}, 20]}\n    ]\n  ]\n}\n"
        computation:
          description: 'Computation to be applied on an event if it matches the matcher. In case of a COUNT aggregation type, computation should be passed as ''1''

            '
          type: string
          maxLength: 500
          example:
            '*':
            - var: attributes.distance
            - 0.4
        order:
          description: The order in which multiple matched computations will get evaluated
          type: integer
  responses:
    BaseSuccessResponse:
      description: OK
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/BaseSuccessResponse'
    UsageMeterResponse:
      description: Response for Create and Get usage event requests
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/UsageMeter'
          examples:
            UsageMeter:
              $ref: '#/components/examples/UsageMeter'
    UsageMeterPaginatedResponse:
      description: Response for list usage_meters request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/UsageMeterPaginatedResponse'
          examples:
            UsageMeterPaginatedResponse:
              $ref: '#/components/examples/UsageMeterPaginatedResponse'
    ErrorResponse:
      description: Error response
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            ErrorResponse:
              summary: Error Message
              value:
                message: <Reason message>
  requestBodies:
    UpdateUsageMeterRequest:
      description: Payload to create usage meter
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/UpdateUsageMeterRequest'
    CreateUsageMeterRequest:
      description: Payload to create usage meter
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CreateUsageMeterRequest'
          examples:
            UsageMeter:
              $ref: '#/components/examples/CreateUsageMeterRequest'
  examples:
    UsageMeter:
      value:
        id: um.1zlQTBWlkeO.lB7fh
        name: Rides
        displayName: Rides
        description: Cab rides
        type: COUNTER
        aggregation: COUNT
        status: DRAFT
        computations:
        - matcher: "{\n  \"and\": [\n    {\"in\": [{\"var\": \"dimension.city\"}, \"chennai\", \"mumbai\"]},\n    \"or\": [\n      {\">\": [{\"var\": \"attribute.distance\"}, 100]},\n      {\"<\": [{\"var\": \"attribute.distance\"}, 20]}\n    ]\n  ]\n}\n"
          order: 1
          computation: '1'
    UsageMeterPaginatedResponse:
      value:
        data:
        - id: 01BX5ZZKBKACTAV9WEVG
          name: Rides
          displayName: Rides Usage
          description: Cab rides
          type: COUNTER
          aggregation: COUNT
          status: DRAFT
          computations:
          - matcher: "{\n  \"and\": [\n    {\"in\": [{\"var\": \"dimension.city\"}, \"chennai\", \"mumbai\"]},\n    \"or\": [\n      {\">\": [{\"var\": \"attribute.distance\"}, 100]},\n      {\"<\": [{\"var\": \"attribute.distance\"}, 20]}\n    ]\n  ]\n}\n"
            order: 1
            computation: '1'
        nextToken: eyJsYXN0SXRlbUlkIjogInN0cmluZyIsICJwYWdlU2l6ZSI6IDEwMCwgInNvcnRPcmRlciI6ICJhc2MifQ==
        context:
          pageSize: 10
    CreateUsageMeterRequest:
      value:
        name: Rides
        description: Cab rides
        type: COUNTER
        aggregation: SUM
        eventSchemaName: evfhr123d
        computations:
        - matcher: "{\n  \"and\": [\n    {\"in\": [{\"var\": \"dimension.city\"}, \"chennai\", \"mumbai\"]},\n    \"or\": [\n      {\">\": [{\"var\": \"attribute.distance\"}, 100]},\n      {\"<\": [{\"var\": \"attribute.distance\"}, 20]}\n    ]\n  ]\n}\n"
          computation:
            '*':
            - var: attributes.distance
            - 0.4
  parameters:
    page_size:
      in: query
      name: pageSize
      required: false
      schema:
        type: number
        example: 10
    next_token:
      in: query
      name: nextToken
      required: false
      schema:
        type: string
        example: eyJsYXN0SXRlbUlkIjogInN0cmluZyIsICJwYWdlU2l6ZSI6IDEwMCwgInNvcnRPcmRlciI6ICJhc2MifQ==
    usage_meter_id:
      in: path
      name: usage_meter_id
      required: true
      schema:
        type: string
        maxLength: 50
        example: um.1zYnCiM9Bpg.1zYn
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: Bearer <credential>
    apiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
externalDocs:
  description: Find out more about Togai
  url: https://docs.togai.com/docs