openapi: 3.0.3 info: title: June Tracking Companies Users API description: 'REST API for sending user behaviour data to June, including user identification, event tracking, company grouping, and page view recording. Compatible with the Segment tracking protocol. Uses Basic Authentication with a workspace write key. ' version: 1.0.0 contact: url: https://www.june.so/docs termsOfService: https://www.june.so/privacy servers: - url: https://api.june.so/sdk description: June Tracking API base security: - basicAuth: [] tags: - name: Users paths: /identify: post: operationId: identifyUser summary: Identify a user description: 'Identifies a user and associates traits (attributes) with them. The API checks for an email key first in the main payload, then in traits. At least one of userId or anonymousId must be included. ' tags: - Users requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/IdentifyRequest' example: userId: user_12345 traits: email: alice@example.com name: Alice Smith plan: pro responses: '200': description: User identified successfully. content: application/json: schema: $ref: '#/components/schemas/SuccessResponse' '400': description: Bad request — missing required fields or malformed payload. '401': description: Unauthorized — invalid or missing write key. components: schemas: IdentifyRequest: type: object properties: userId: type: string description: 'The ID for this user in your database. At least one of userId or anonymousId must be provided. ' example: user_12345 anonymousId: type: string description: 'An ID for the user when identity is unknown. At least one of userId or anonymousId must be provided. ' example: anon_abc123 traits: type: object description: 'A dictionary of user attributes such as email, name, company, etc. The API checks for an email key first in the main payload, then in traits. ' additionalProperties: true example: email: alice@example.com name: Alice Smith plan: pro timestamp: type: string format: date-time description: 'ISO 8601 date-time string representing when identification occurred. Defaults to server time if omitted. ' example: '2026-06-12T10:00:00Z' context: $ref: '#/components/schemas/Context' SuccessResponse: type: object properties: status: type: integer example: 200 success: type: boolean example: true Context: type: object description: 'A dictionary of extra context to attach to the call. Differs from traits in that it is not user-specific attributes. ' properties: app: type: object description: Information about the application. properties: name: type: string version: type: string build: type: string campaign: type: object description: UTM campaign parameters. properties: name: type: string source: type: string medium: type: string term: type: string content: type: string device: type: object description: Device information. properties: type: type: string manufacturer: type: string model: type: string ip: type: string description: The user's IP address. example: 203.0.113.42 locale: type: string description: The locale of the user (e.g., en-US). example: en-US os: type: object description: Operating system information. properties: name: type: string version: type: string referrer: type: object description: Referral information. properties: id: type: string type: type: string url: type: string screen: type: object description: Screen dimensions and density. properties: width: type: integer height: type: integer density: type: number timezone: type: string description: The user's timezone in tzdata format. example: America/New_York groupId: type: string description: The group or company identifier to associate the event with. example: company_67890 additionalProperties: true securitySchemes: basicAuth: type: http scheme: basic description: 'Provide your workspace write key as the username via HTTP Basic Auth. Obtain the write key from your June workspace settings. '