Tabs Events API

The Events API from Tabs — 8 operation(s) for events.

OpenAPI Specification

tabs-events-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Tabs External Billing Terms Events API
  description: ''
  version: 1.0.0
  contact: {}
  x-apievangelist:
    generated: '2026-07-21'
    method: searched
    source: https://docs.tabsplatform.com/reference (OpenAPI definitions embedded per-operation in the ReadMe reference pages, merged; index at https://docs.tabsplatform.com/llms.txt)
    source_pages: 93
servers:
- url: https://integrators.prod.api.tabsplatform.com
security:
- custom-header: []
tags:
- name: Events
paths:
  /v3/events/bulk:
    post:
      operationId: IntegratorsApiEventsController_createEvents
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkCreateEventDto'
      responses:
        '200':
          description: The Events
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreatedEventsDto'
        '400':
          description: Some events failed validation
        '500':
          description: Internal server error
      summary: Bulk create events (legacy)
      tags:
      - Events
    delete:
      operationId: IntegratorsApiEventsController_deleteEventsBulk
      parameters: []
      requestBody:
        required: true
        description: Array of event IDs to delete
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
              example:
              - event-id-1
              - event-id-2
              - event-id-3
      responses:
        '200':
          description: All events deleted successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: number
                    example: 200
        '400':
          description: Bad request - invalid event IDs or other validation errors
        '404':
          description: One or more events not found - no events will be deleted
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 404
                  message:
                    type: string
                    example: 'Events not found: event-id-1, event-id-2'
        '500':
          description: Internal server error - transaction failed
      summary: Bulk delete events (legacy)
      tags:
      - Events
  /v3/events:
    post:
      operationId: IntegratorsApiEventsController_createEvent
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEventDto'
      responses:
        '201':
          description: The Event
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreatedEventsDto'
        '400':
          description: Event already exists
      summary: Create event (legacy)
      tags:
      - Events
    get:
      operationId: IntegratorsApiEventsController_getEvents
      parameters:
      - name: page
        required: true
        in: query
        description: Page Number
        schema:
          default: 1
          type: number
      - name: limit
        required: true
        in: query
        description: Number of items to return
        schema:
          default: 50
          type: number
      - name: filter
        required: false
        in: query
        description: "\n      Supported items for filter: eventTypeId, customerId, differentiator, datetime\n\n      Datetime should be in YYYY-MM-DD format"
        schema:
          type: string
      responses:
        '200':
          description: Get all Events by filter
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/IntegratorsApiResponse'
                - properties:
                    payload:
                      allOf:
                      - $ref: '#/components/schemas/PaginatedResponseDTO'
                      - properties:
                          data:
                            type: array
                            items:
                              $ref: '#/components/schemas/CreatedEventsDto'
                          limit:
                            type: number
                          totalItems:
                            type: number
                          currentPage:
                            type: number
      summary: List events (legacy)
      tags:
      - Events
  /v3/events/{id}:
    delete:
      operationId: IntegratorsApiEventsController_deleteEvents
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      responses:
        '200':
          description: The Events
      summary: Delete event (legacy)
      tags:
      - Events
  /v3/events/types:
    get:
      operationId: IntegratorsApiEventsController_getEventTypes
      parameters:
      - name: page
        required: true
        in: query
        description: Page Number
        schema:
          default: 1
          type: number
      - name: limit
        required: true
        in: query
        description: Number of items to return
        schema:
          default: 50
          type: number
      - name: filter
        required: false
        in: query
        description: 'Supported items for filter: name'
        schema:
          type: string
      responses:
        '200':
          description: Get all Event Types
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/IntegratorsApiResponse'
                - properties:
                    payload:
                      allOf:
                      - $ref: '#/components/schemas/PaginatedResponseDTO'
                      - properties:
                          data:
                            type: array
                            items:
                              $ref: '#/components/schemas/EventTypeDto'
                          limit:
                            type: number
                          totalItems:
                            type: number
                          currentPage:
                            type: number
      summary: List event types
      tags:
      - Events
    post:
      operationId: IntegratorsApiEventsController_createEventType
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEventTypeDto'
      responses:
        '200':
          description: The Event Type
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventTypeDto'
        '400':
          description: Event Type already exists
      summary: Create event type
      tags:
      - Events
  /v3/events/types/{eventTypeId}:
    get:
      operationId: IntegratorsApiEventsController_getEventTypeByEventTypeId
      parameters:
      - name: eventTypeId
        required: true
        in: path
        schema:
          type: string
      responses:
        '200':
          description: The Event Type
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventTypeDto'
        '404':
          description: Event Type not found
      summary: Get event type by ID
      tags:
      - Events
    delete:
      operationId: IntegratorsApiEventsController_deleteEventType
      parameters:
      - name: eventTypeId
        required: true
        in: path
        schema:
          type: string
      responses:
        '200':
          description: The Event Type
        '400':
          description: Event Type is still in use and cannot be deleted
        '404':
          description: Event Type not found
      summary: Delete event type
      tags:
      - Events
  /v1/events:
    get:
      tags:
      - Events
      summary: Get all events
      description: Fetches all usage events, and can be filtered as needed. Reach out to your account manager if you would like to participate in the Beta for the new Usage API.
      operationId: getEvents
      parameters:
      - name: startDate
        in: query
        description: 'Start date for filtering events (UTC) (format: YYYY-MM-DDTHH:mm:ss)'
        required: false
        schema:
          type: string
      - name: endDate
        in: query
        description: 'End date for filtering events (UTC) (format: YYYY-MM-DDTHH:mm:ss)'
        required: false
        schema:
          type: string
      - name: ingestStartDate
        in: query
        description: 'Start ingest timestamp for filtering events (UTC) (format: YYYY-MM-DDTHH:mm:ss)'
        required: false
        schema:
          type: string
      - name: ingestEndDate
        in: query
        description: 'End ingest timestamp for filtering events (UTC) (format: YYYY-MM-DDTHH:mm:ss)'
        required: false
        schema:
          type: string
      - name: customerId
        in: query
        description: Tabs Customer ID to filter events
        required: false
        schema:
          type: string
      - name: eventTypeId
        in: query
        description: Event type ID to filter events
        required: false
        schema:
          type: string
      - name: source
        in: query
        description: Source to filter events
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: 'Number of events to return (default: 50, max: 1000)'
        required: false
        schema:
          type: integer
          format: int32
      - name: cursor
        in: query
        description: Cursor for pagination
        required: false
        schema:
          type: string
      - name: orderDirection
        in: query
        description: Sort direction (asc/desc)
        required: false
        schema:
          type: string
      - name: skipDeletionEvents
        in: query
        description: 'Include deleted events in the response (default: true)'
        required: false
        schema:
          type: boolean
          default: true
      responses:
        '200':
          description: Events retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventsQueryResponse'
              examples:
                Success Response:
                  description: Success Response
                  value:
                    events:
                    - customerId: 550e8400-e29b-41d4-a716-446655440000
                      eventTypeId: 550e8400-e29b-41d4-a716-446655440000
                      datetime: '2024-01-15T10:30:00Z'
                      idempotencyKey: 018c1234-5678-7abc-def0-123456789abc
                      value: 1
                      differentiator: mobile
                      invoiceSplitKey: invoice-123
                      deleted: false
                    count: 100
                    nextCursor: next-page-cursor
                    hasMore: true
        '400':
          description: Bad request - Invalid parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorResponse'
              examples:
                Bad Request Error:
                  description: Bad Request Error
                  value:
                    success: false
                    message: Validation failed
                    error:
                      code: 400
                      message: Validation failed
                      details:
                        startDate:
                        - Invalid date format. Expected YYYY-MM-DDTHH:mm:ss
                        limit:
                        - Limit must be between 1 and 1000
        '429':
          description: Too Many Requests - Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitResponse'
              examples:
                Rate Limit Error:
                  description: Rate Limit Error
                  value:
                    statusCode: 429
                    message: Rate limit exceeded. Maximum 10000 requests per minute allowed.
                    timestamp: '2024-01-15T10:30:00Z'
                    path: /v1/events
                    method: GET
                    retryAfter: 30
        '500':
          description: Internal server error - Failed to retrieve events
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorResponse'
              examples:
                Internal Server Error:
                  description: Internal Server Error
                  value:
                    success: false
                    message: Failed to retrieve events
                    error:
                      code: 500
                      message: Failed to retrieve events
                      details:
                        error:
                        - Internal server error
      security:
      - custom-header: []
    post:
      tags:
      - Events
      summary: Create an event
      description: Creates a new usage event. Requires valid authentication and unique idempotency key. Reach out to your account manager if you would like to participate in the Beta for the new Usage API.
      operationId: ingestEvent
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EventCreateRequest'
        required: true
      responses:
        '200':
          description: Event created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventCreateResponse'
              examples:
                Success Response:
                  description: Success Response
                  value:
                    success: true
                    message: Event created successfully
                    data:
                      events:
                        manufacturerId: 550e8400-e29b-41d4-a716-446655440000
                        customerId: 550e8400-e29b-41d4-a716-446655440000
                        eventTypeId: 550e8400-e29b-41d4-a716-446655440000
                        datetime: '2024-01-15T10:30:00Z'
                        idempotencyKey: 018c1234-5678-7abc-def0-123456789abc
                        value: 1
                        differentiator: mobile
                        invoiceSplitKey: invoice-123
        '400':
          description: Bad request - Invalid event data or duplicate idempotency key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorResponse'
              examples:
                Idempotency Key Error:
                  description: Idempotency Key Error
                  value:
                    success: false
                    message: Validation failed
                    error:
                      code: 400
                      message: Validation failed
                      details:
                        idempotencyKey:
                        - Idempotency key 018c1234-5678-7abc-def0-123456789abc already exists
        '401':
          description: Unauthorized - Invalid or missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
              examples:
                Unauthorized Response:
                  description: Unauthorized Response
                  value:
                    statusCode: 401
                    message: 'Invalid or missing API key. Use ''Authorization: Bearer <your-key>'''
                    timestamp: '2024-01-15T10:30:00Z'
                    path: /v1/events
                    method: POST
        '422':
          description: Unprocessable Entity - Validation errors
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorResponse'
              examples:
                Validation Error:
                  description: Validation Error
                  value:
                    success: false
                    message: Validation failed
                    error:
                      code: 422
                      message: Validation failed
                      details:
                        customerId:
                        - Customer ID is required
                        eventTypeId:
                        - Event type is required
        '429':
          description: Too Many Requests - Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitResponse'
              examples:
                Rate Limit Error:
                  description: Rate Limit Error
                  value:
                    statusCode: 429
                    message: Rate limit exceeded. Maximum 10000 requests per minute allowed.
                    timestamp: '2024-01-15T10:30:00Z'
                    path: /v1/events
                    method: POST
                    retryAfter: 30
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorResponse'
              examples:
                Internal Server Error:
                  description: Internal Server Error
                  value:
                    success: false
                    message: Internal server error
                    error:
                      code: 500
                      message: An unexpected error occurred
                      details:
                        error:
                        - Internal server error
      security:
      - custom-header: []
  /v1/version:
    get:
      tags:
      - Events
      summary: Get API version information
      description: Returns the current API version, name, and description
      operationId: getVersion
      responses:
        '200':
          description: Version information retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VersionResponse'
              examples:
                Version Response:
                  description: Version Response
                  value:
                    version: v1
                    api: Events API
                    description: Event Ingestion API for usage in Tabs
        '429':
          description: Too Many Requests - Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitResponse'
              examples:
                Rate Limit Error:
                  description: Rate Limit Error
                  value:
                    statusCode: 429
                    message: Rate limit exceeded. Maximum 10000 requests per minute allowed.
                    timestamp: '2024-01-15T10:30:00Z'
                    path: /v1/version
                    method: GET
                    retryAfter: 30
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorResponse'
              examples:
                Internal Server Error:
                  description: Internal Server Error
                  value:
                    success: false
                    message: Internal server error
                    error:
                      code: 500
                      message: An unexpected error occurred
                      details:
                        error:
                        - Internal server error
      security:
      - custom-header: []
  /v1/events/{idempotencyKey}:
    delete:
      tags:
      - Events
      summary: Delete an event
      description: Deletes a usage event by creating a new deletion event that links back to the original event. Requires valid authentication. Reach out to your account manager if you would like to participate in the Beta for the new Usage API.
      operationId: deleteEvent
      parameters:
      - name: idempotencyKey
        in: path
        description: Event key of the event that should be deleted
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Event deleted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventDeleteResponse'
              examples:
                Success Response:
                  description: Success Response
                  value:
                    success: true
                    message: Event deleted successfully
                    data:
                      events:
                        customerId: 550e8400-e29b-41d4-a716-446655440000
                        eventTypeId: 550e8400-e29b-41d4-a716-446655440000
                        datetime: '2024-01-15T10:30:00Z'
                        idempotencyKey: 018c1234-5678-7abc-def0-123456789abc
                        value: -1
                        parentEventId: 018c1234-5678-7abc-def0-123456789000
        '400':
          description: Bad request - Event not found or invalid idempotency key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorResponse'
              examples:
                Not Found Error:
                  description: Not Found Error
                  value:
                    success: false
                    message: Validation failed
                    error:
                      code: 400
                      message: Validation failed
                      details:
                        idempotencyKey:
                        - Event with idempotency key 018c1234-5678-7abc-def0-123456789abc not found
        '401':
          description: Unauthorized - Invalid or missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
        '429':
          description: Too Many Requests - Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitResponse'
              examples:
                Rate Limit Error:
                  description: Rate Limit Error
                  value:
                    statusCode: 429
                    message: Rate limit exceeded. Maximum 10000 requests per minute allowed.
                    timestamp: '2024-01-15T10:30:00Z'
                    path: /v1/events/018c1234-5678-7abc-def0-123456789abc
                    method: DELETE
                    retryAfter: 30
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorResponse'
              examples:
                Internal Server Error:
                  description: Internal Server Error
                  value:
                    success: false
                    message: Internal server error
                    error:
                      code: 500
                      message: An unexpected error occurred
                      details:
                        error:
                        - Internal server error
      security:
      - custom-header: []
components:
  schemas:
    ErrorDetail:
      type: object
      properties:
        code:
          type: integer
          description: Error code
          format: int32
          example: 400
        message:
          type: string
          description: Error message
          example: Validation failed
        details:
          type: object
          additionalProperties:
            type: array
            description: Map of field names to array of error messages
            items:
              type: string
              description: Map of field names to array of error messages
          description: Map of field names to array of error messages
      description: Detailed error information
    EventTypeDto:
      type: object
      properties:
        id:
          type: string
          description: The id of the event type
          example: 123e4567-e89b-12d3-a456-426614174000
        name:
          type: string
          description: The name of the event type
          example: Event Type Name
      required:
      - id
      - name
    VersionResponse:
      type: object
      properties:
        version:
          type: string
          description: API version
          example: v1
        api:
          type: string
          description: API name
          example: Events API
        description:
          type: string
          description: API description
          example: Event Ingestion API for usage in Tabs
      description: API version information response
    UnauthorizedResponse:
      type: object
      properties:
        statusCode:
          type: integer
          description: HTTP status code
          format: int32
          example: 401
        message:
          type: string
          description: Error message
          example: 'Invalid or missing API key. Use ''Authorization: Bearer <your-key>'''
        timestamp:
          type: string
          description: Timestamp when the error occurred
          example: '2024-01-15T10:30:00Z'
        path:
          type: string
          description: Request path
          example: /v1/events
        method:
          type: string
          description: HTTP method
          example: POST
      description: Unauthorized error response
    CreateEventTypeDto:
      type: object
      properties:
        name:
          type: string
          description: The name of the event type
          example: Event Type Name
      required:
      - name
    EventResponse:
      type: object
      properties:
        customerId:
          type: string
          description: Tabs Customer ID - must be a valid UUID v4
          format: uuid
          example: 550e8400-e29b-41d4-a716-446655440000
        eventTypeId:
          type: string
          description: Type of event being recorded - must be a valid UUID v4
          format: uuid
          example: 550e8400-e29b-41d4-a716-446655440000
        datetime:
          type: string
          description: 'Timestamp when the event occurred (UTC) (format: ISO-8601 datetime string)'
          format: date-time
          example: '2024-01-15T10:30:00Z'
        idempotencyKey:
          type: string
          description: Unique key to prevent duplicate event processing - must be a valid UUID v4
          format: uuid
          example: 550e8400-e29b-41d4-a716-446655440000
        value:
          type: number
          description: Numeric value of the event
          format: double
          example: 1.5
        differentiator:
          type: string
          description: Optional key to separate events with the same event type and customer into different invoice line items; differentiator will be appended to the description of the new invoice line item
          example: mobile
        invoiceSplitKey:
          type: string
          description: Optional key to split events into a new invoice; the split key will be appended to the new invoice number
          example: invoice-123
        parentEventId:
          type: string
          description: Parent event ID - the idempotency key of the original event that was deleted (only present in DELETE responses)
          format: uuid
          example: 018c1234-5678-7abc-def0-123456789000
        metadata:
          type: object
          additionalProperties:
            type: object
            description: Optional metadata in JSON format
            example:
              key: value
          description: Optional metadata in JSON format
          example:
            key: value
      description: Event response data
    CreateEventDto:
      type: object
      properties:
        customerId:
          type: string
          description: The ID of the customer
          example: 123e4567-e89b-12d3-a456-426614174000
        datetime:
          format: date-time
          type: string
          description: The date and time of the event
          example: '2021-01-01T00:00:00.000Z'
        eventTypeId:
          type: string
          description: The type of event
          example: 123e4567-e89b-12d3-a456-426614174000
        value:
          type: string
          description: The value of the event, usually a number
          example: '123'
        differentiator:
          type: string
          description: The differentiator of the event
          example: DIFF
        metadata:
          type: object
          description: event metadata
          example: '{"key":"value"}'
        invoiceGroup:
          type: string
          description: The invoice group for split invoicing
          example: '123'
      required:
      - customerId
      - datetime
      - eventTypeId
      - value
      - metadata
    EventDto:
      type: object
      properties:
        manufacturerId:
          type: string
        eventTypeId:
          type: string
        metadata:
          type: object
          additionalProperties:
            type: object
        value:
          type: string
        differentiator:
          type: string
        invoiceGroup:
          type: string
        idempotencyKey:
          type: string
        datetime:
          type: string
        customerId:
          type: string
        parentEventId:
          type: string
        source:
          type: string
        deleted:
          type: boolean
          description: Whether the event is deleted
          example: true
      description: Event data transfer object
    IntegratorsApiError:
      type: object
      properties:
        code:
          type: number
          description: API response code
        message:
          type: string
          description: API response message
        details:
          type: object
          description: Additional details about the error
      required:
      - code
      - message
    EventsQueryResponse:
      type: object
      properties:
        events:
          type: array
          description: List of events
          items:
            $ref: '#/components/schemas/EventDto'
        count:
          type: integer
          description: Total count of events
          format: int32
          example: 100
        nextCursor:
          type: string
          description: Cursor for the next page of results
          example: next-page-cursor
        hasMore:
          type: boolean
          description: Whether there are more results available
          example: true
      description: Response containing a list of events with pagination information
    PaginatedResponseDTO:
      type: object
      properties: {}
    CreatedEventsDto:
      type: object
      properties:
        customerId:
          type: string
          description: The ID of the customer
          example: 123e4567-e89b-12d3-a456-426614174000
        datetime:
          format: date-time
          type: string
          description: The date and time of the event
          example: '2021-01-01T00:00:00.000Z'
        eventTypeId:
          type: string
          description: The type of event
          example: 123e4567-e89b-12d3-a456-426614174000
        value:
          type: string
          description: The value of the event, usually a number
          example: '123'
        differentiator:
          type: string
          description: The differentiator of the event
          example: DIFF
        metadata:
          type: object
          description: event metadata
          example

# --- truncated at 32 KB (37 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/tabs/refs/heads/main/openapi/tabs-events-api-openapi.yml