Koala Profile Ingestion API
Endpoints for sending events and traits tied to individual visitors (profiles).
Endpoints for sending events and traits tied to individual visitors (profiles).
openapi: 3.0.3
info:
title: Koala Server-Side Account Ingestion Profile 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: Profile Ingestion
description: Endpoints for sending events and traits tied to individual visitors (profiles).
paths:
/batch:
post:
operationId: sendProfileBatch
summary: Send profile-level batch events, identifies, and page views
description: 'Ingests a batch of events, identify calls, and/or page views tied to a single profile (visitor). Each request must include either a `profile_id` (UUID v4 read from the `ko_id` cookie) or an `email`. A maximum of 30 entries each of events, identifies, and page_views per request is enforced. All entries in a single request must belong to the same person.
'
tags:
- Profile 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/ProfileBatchRequest'
examples:
identify:
summary: Identify a visitor
value:
profile_id: 3e6a2c18-3b02-40c4-b8d2-1842c193d3ba
email: person@example.com
trackEvent:
summary: Send a custom event
value:
profile_id: 3e6a2c18-3b02-40c4-b8d2-1842c193d3ba
email: netto@getkoala.com
events:
- message_id: abc123-unique-id
type: track
event: Created Account
properties: {}
sent_at: '2022-11-09T23:57:14.776Z'
sendTraits:
summary: Send visitor traits
value:
profile_id: 3e6a2c18-3b02-40c4-b8d2-1842c193d3ba
email: user@example.org
identifies:
- type: identify
sent_at: '2023-11-30T02:51:36.840Z'
traits:
email: user@example.org
billing_plan: pro
vip: true
is_current_customer: true
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
PageView:
type: object
description: A page view event in the Segment-compatible format.
required:
- type
properties:
message_id:
type: string
description: Optional idempotency key.
type:
type: string
enum:
- page
description: Must be "page".
name:
type: string
description: Human-readable page name.
properties:
type: object
description: Arbitrary properties including url, referrer, title, etc.
additionalProperties: true
sent_at:
type: string
format: date-time
description: ISO 8601 timestamp when the page view was captured.
ProfileBatchRequest:
type: object
description: 'Payload for the profile /batch endpoint. Must include at least one of `profile_id` or `email`. Optionally includes up to 30 each of `events`, `identifies`, and `page_views`.
'
properties:
profile_id:
type: string
format: uuid
description: 'UUID v4 anonymous visitor identifier read from the `ko_id` cookie set by the Koala JavaScript pixel.
'
example: 3e6a2c18-3b02-40c4-b8d2-1842c193d3ba
email:
type: string
format: email
description: Known email address of the visitor for identity resolution.
example: person@example.com
events:
type: array
maxItems: 30
description: Custom track events to associate with this profile.
items:
$ref: '#/components/schemas/TrackEvent'
identifies:
type: array
maxItems: 30
description: Identify calls carrying visitor trait data.
items:
$ref: '#/components/schemas/IdentifyCall'
page_views:
type: array
maxItems: 30
description: Page view events to associate with this profile.
items:
$ref: '#/components/schemas/PageView'
anyOf:
- required:
- profile_id
- required:
- email
IdentifyCall:
type: object
description: An identify call carrying visitor-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.
example: '2023-11-30T02:51:36.840Z'
traits:
type: object
description: Arbitrary key-value traits to associate with the visitor.
additionalProperties: true
properties:
email:
type: string
format: email
billing_plan:
type: string
vip:
type: boolean
is_current_customer:
type: boolean
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