Koala Account Ingestion API

Endpoints for sending events and traits tied to company accounts.

OpenAPI Specification

koala-account-ingestion-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Koala Server-Side Account Ingestion API
  description: 'RESTful server-side API for sending batched events, visitor identifications, and account traits to Koala''s intent data platform. Supports profile-level and account-level batch ingestion for use in backend services, data pipelines, and edge compute environments where the JavaScript snippet cannot run.

    '
  version: 1.0.0
  contact:
    name: Koala Developer Docs
    url: https://getkoala.com/docs/developer-guides/server-side
  termsOfService: https://getkoala.com/legal/terms
servers:
- url: https://api2.getkoala.com/web/projects/{publicApiKey}
  description: Koala collection endpoint (replace {publicApiKey} with your workspace public API key)
  variables:
    publicApiKey:
      default: my-public-api-key
      description: Your Koala workspace public API key
tags:
- name: Account Ingestion
  description: Endpoints for sending events and traits tied to company accounts.
paths:
  /accounts/batch:
    post:
      operationId: sendAccountBatch
      summary: Send account-level batch events and traits
      description: 'Ingests a batch of identify calls (traits) and/or events associated with a company account rather than an individual visitor. Each request must include either an `account_id` or `domain`. Koala will create a new Account automatically if the domain has not been tracked before. Use the optional `group_id` inside each identify to disambiguate multiple tenants sharing the same domain.

        '
      tags:
      - Account Ingestion
      parameters:
      - name: publicApiKey
        in: path
        required: true
        description: Your Koala workspace public API key
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AccountBatchRequest'
            examples:
              accountTraits:
                summary: Send account traits
                value:
                  domain: getkoala.com
                  identifies:
                  - type: identify
                    traits:
                      billing_plan: pro
                      vip: true
                      headcount: 100
              accountTraitsMultiTenant:
                summary: Send traits for multiple tenant groups
                value:
                  domain: getkoala.com
                  identifies:
                  - type: identify
                    traits:
                      group_id: development-team
                      billing_plan: free
                      vip: false
                  - type: identify
                    traits:
                      group_id: marketing-team
                      billing_plan: pro
                      vip: true
              accountEvent:
                summary: Send an account-level event
                value:
                  domain: getkoala.com
                  events:
                  - message_id: event-uuid-1234
                    type: track
                    event: Workspace Created
                    properties:
                      workspace_id: '1234567890'
                      workspace_name: Acme, Inc.
                    sent_at: '2022-11-09T23:57:14.776Z'
      responses:
        '200':
          description: Batch accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchResponse'
        '400':
          description: Bad request — missing required identifier or malformed payload
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized — invalid or missing public API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too many requests — rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security: []
components:
  schemas:
    BatchResponse:
      type: object
      description: Successful batch acceptance response.
      properties:
        ok:
          type: boolean
          description: Indicates the batch was accepted.
          example: true
    AccountBatchRequest:
      type: object
      description: 'Payload for the account /accounts/batch endpoint. Must include at least one of `account_id` or `domain`. Optionally includes `identifies` and `events` associated with the account.

        '
      properties:
        account_id:
          type: string
          description: Koala internal account identifier.
          example: acct_abc123
        domain:
          type: string
          description: 'The company domain (e.g. "example.com") used to identify or create the account. Koala creates a new Account if this domain is not yet tracked.

            '
          example: getkoala.com
        identifies:
          type: array
          description: Account-level identify calls carrying trait data.
          items:
            $ref: '#/components/schemas/AccountIdentifyCall'
        events:
          type: array
          description: Account-level track events.
          items:
            $ref: '#/components/schemas/TrackEvent'
      anyOf:
      - required:
        - account_id
      - required:
        - domain
    AccountIdentifyCall:
      type: object
      description: An identify call carrying account-level traits.
      required:
      - type
      properties:
        type:
          type: string
          enum:
          - identify
          description: Must be "identify".
        sent_at:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the identify was generated.
        traits:
          type: object
          description: Arbitrary key-value traits to associate with the account.
          additionalProperties: true
          properties:
            group_id:
              type: string
              description: 'Optional tenant disambiguator for companies with multiple groups.

                '
              example: development-team
            billing_plan:
              type: string
            vip:
              type: boolean
            headcount:
              type: integer
    ErrorResponse:
      type: object
      description: Error response body.
      properties:
        error:
          type: string
          description: Human-readable error message.
        code:
          type: string
          description: Machine-readable error code.
    TrackEvent:
      type: object
      description: A custom track event in the Segment-compatible format.
      required:
      - type
      - event
      properties:
        message_id:
          type: string
          description: 'Optional idempotency key. If omitted, the event may be captured more than once on retry. Use a UUID or other unique string.

            '
          example: abc123-unique-id
        type:
          type: string
          enum:
          - track
          description: Must be "track".
        event:
          type: string
          description: Human-readable event name.
          example: Created Account
        properties:
          type: object
          description: Arbitrary key-value properties associated with the event.
          additionalProperties: true
        sent_at:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the event was generated.
          example: '2022-11-09T23:57:14.776Z'
externalDocs:
  description: Koala Developer Guides
  url: https://getkoala.com/docs/developer-guides/server-side