HipChat REST API v2

The HipChat REST API v2 was the primary developer surface for the team chat platform, exposing rooms, users, messages, notifications, emoticons, OAuth sessions, add-on capabilities, and webhook management. Authentication supported four token types (add-on tokens, user tokens, personal access tokens, and room notification tokens) passed as either an auth_token query parameter or an Authorization Bearer header. The API was retired on February 15, 2019 alongside the rest of the HipChat product line.

HipChat REST API v2 is one of 2 APIs that HipChat publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 5 machine-runnable capabilities that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko and 4 JSON Schema definitions.

Tagged areas include Chat, Rooms, Messages, Users, and Notifications. The published artifact set on APIs.io includes API documentation, an API reference, an OpenAPI specification, authentication docs, rate-limit docs, a getting-started guide, 5 Naftiko capability specs, and 4 JSON Schemas.

Documentation

Specifications

SDKs

Schemas & Data

Other Resources

OpenAPI Specification

hipchat-rest-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: HipChat REST API v2
  version: '2.0'
  summary: Historical OpenAPI for Atlassian's discontinued HipChat team chat platform.
  description: |
    The HipChat REST API v2 powered Atlassian's HipChat team chat platform. This OpenAPI document
    is a historical reconstruction based on the Atlassian developer documentation (developer.atlassian.com/server/hipchat)
    and the official client libraries published under github.com/hipchat. It is preserved for archival
    and migration research only.

    **Status: DISCONTINUED on February 15, 2019.** Slack acquired the HipChat and Stride IP from
    Atlassian on July 26, 2018 and the four products (HipChat Cloud, Stride, HipChat Server, HipChat Data
    Center) were sunset together. No production endpoints remain reachable.
  termsOfService: https://www.atlassian.com/legal/customer-agreement
  contact:
    name: Atlassian (historical)
    url: https://www.atlassian.com/migration/move-from-hipchat-to-slack
  license:
    name: Documentation reused under Atlassian Developer Terms
    url: https://developer.atlassian.com/platform/marketplace/atlassian-developer-terms/
  x-status: sunset
  x-lifecycle: discontinued
  x-sunset-date: '2019-02-15'
  x-end-of-sale: '2018-07-26'
  x-replacement: https://slack.com
servers:
- url: https://api.hipchat.com/v2
  description: HipChat Cloud (historical; no longer reachable)
- url: https://{hipchat-server-host}/v2
  description: HipChat Server / Data Center (historical; self-hosted, no longer supported)
  variables:
    hipchat-server-host:
      default: hipchat.example.com
security:
- BearerAuth: []
- QueryToken: []
tags:
- name: Rooms
  description: Create, read, update, archive, and notify chat rooms.
- name: Users
  description: Manage HipChat users and look up profile information.
- name: Messages
  description: Send and retrieve room messages and private messages.
- name: Webhooks
  description: Register and manage room webhooks.
- name: Emoticons
  description: Read and manage the emoticon catalog.
- name: Sessions
  description: Active XMPP / web sessions.
- name: OAuth Sessions
  description: OAuth 2 client credentials and add-on session management.
- name: Capabilities
  description: HipChat Connect add-on capability discovery.
- name: Add-ons
  description: Install, configure, and uninstall HipChat Connect add-ons.
paths:
  /capabilities:
    get:
      tags: [Capabilities]
      summary: Get HipChat Capabilities Descriptor
      description: Returns the capabilities document describing the API surface and OAuth endpoints of the
        HipChat installation. Used by HipChat Connect add-ons during installation.
      operationId: getCapabilities
      responses:
        '200':
          description: Capabilities descriptor.
          content:
            application/json:
              schema:
                type: object
  /oauth/token:
    post:
      tags: [OAuth Sessions]
      summary: Generate OAuth Access Token
      description: Exchange client credentials (or an authorization code) for a bearer access token. Used
        by HipChat Connect add-ons after installation.
      operationId: generateToken
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [grant_type]
              properties:
                grant_type:
                  type: string
                  enum: [client_credentials, authorization_code, password, refresh_token]
                username:
                  type: string
                password:
                  type: string
                scope:
                  type: string
                  description: Space-separated list of scopes.
      responses:
        '200':
          description: Access token issued.
          content:
            application/json:
              schema:
                type: object
                properties:
                  access_token: {type: string}
                  expires_in: {type: integer}
                  group_id: {type: integer}
                  group_name: {type: string}
                  scope: {type: string}
                  token_type: {type: string, enum: [bearer]}
  /room:
    get:
      tags: [Rooms]
      summary: Get All Rooms
      description: List all rooms in the HipChat group.
      operationId: getAllRooms
      parameters:
      - $ref: '#/components/parameters/StartIndex'
      - $ref: '#/components/parameters/MaxResults'
      - name: include-private
        in: query
        schema: {type: boolean, default: false}
      - name: include-archived
        in: query
        schema: {type: boolean, default: false}
      responses:
        '200':
          description: Page of rooms.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoomCollection'
    post:
      tags: [Rooms]
      summary: Create Room
      description: Create a new HipChat room owned by the authenticated user.
      operationId: createRoom
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RoomCreateRequest'
      responses:
        '201':
          description: Room created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoomReference'
  /room/{id_or_name}:
    parameters:
    - $ref: '#/components/parameters/RoomIdOrName'
    get:
      tags: [Rooms]
      summary: Get Room Details
      description: Returns room metadata, owner, privacy, topic, and integration settings.
      operationId: getRoom
      responses:
        '200':
          description: Room details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Room'
    put:
      tags: [Rooms]
      summary: Update Room
      description: Update mutable room fields (name, topic, privacy, owner, archived).
      operationId: updateRoom
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RoomUpdateRequest'
      responses:
        '204':
          description: Room updated.
    delete:
      tags: [Rooms]
      summary: Delete Room
      description: Permanently delete a room.
      operationId: deleteRoom
      responses:
        '204':
          description: Room deleted.
  /room/{id_or_name}/notification:
    parameters:
    - $ref: '#/components/parameters/RoomIdOrName'
    post:
      tags: [Rooms, Messages]
      summary: Send Room Notification
      description: |
        Send a notification message to a room. Subject to a separate flood-control rate limit of
        30 messages per minute per room (see `X-FloodControl-Limit` response headers).
      operationId: sendRoomNotification
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NotificationRequest'
      responses:
        '204':
          description: Notification accepted.
  /room/{id_or_name}/message:
    parameters:
    - $ref: '#/components/parameters/RoomIdOrName'
    post:
      tags: [Rooms, Messages]
      summary: Send Room Message
      description: Send a message authored by the authenticated user to a room.
      operationId: sendRoomMessage
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [message]
              properties:
                message: {type: string, maxLength: 10000}
      responses:
        '200':
          description: Message accepted.
          content:
            application/json:
              schema:
                type: object
                properties:
                  id: {type: string}
                  timestamp: {type: string, format: date-time}
  /room/{id_or_name}/history:
    parameters:
    - $ref: '#/components/parameters/RoomIdOrName'
    get:
      tags: [Rooms, Messages]
      summary: View Room History
      description: Returns the history of messages for the room.
      operationId: getRoomHistory
      parameters:
      - name: date
        in: query
        schema: {type: string, format: date-time}
      - name: timezone
        in: query
        schema: {type: string, default: UTC}
      - $ref: '#/components/parameters/StartIndex'
      - $ref: '#/components/parameters/MaxResults'
      - name: reverse
        in: query
        schema: {type: boolean, default: true}
      responses:
        '200':
          description: Message history page.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MessageCollection'
  /room/{id_or_name}/history/latest:
    parameters:
    - $ref: '#/components/parameters/RoomIdOrName'
    get:
      tags: [Rooms, Messages]
      summary: View Recent Room History
      description: Returns the most recent messages from a room with optional not-before filtering.
      operationId: getLatestRoomHistory
      parameters:
      - name: not-before
        in: query
        schema: {type: string}
      - name: timezone
        in: query
        schema: {type: string, default: UTC}
      - $ref: '#/components/parameters/MaxResults'
      responses:
        '200':
          description: Recent messages.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MessageCollection'
  /room/{id_or_name}/webhook:
    parameters:
    - $ref: '#/components/parameters/RoomIdOrName'
    get:
      tags: [Webhooks]
      summary: Get All Room Webhooks
      description: List webhooks registered against the room.
      operationId: getAllRoomWebhooks
      responses:
        '200':
          description: Webhook collection.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookCollection'
    post:
      tags: [Webhooks]
      summary: Create Room Webhook
      description: Register a webhook against a room for a specified event.
      operationId: createRoomWebhook
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookCreateRequest'
      responses:
        '201':
          description: Webhook created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
  /room/{id_or_name}/webhook/{webhook_id}:
    parameters:
    - $ref: '#/components/parameters/RoomIdOrName'
    - name: webhook_id
      in: path
      required: true
      schema: {type: string}
    get:
      tags: [Webhooks]
      summary: Get Room Webhook
      operationId: getRoomWebhook
      responses:
        '200':
          description: Webhook details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
    delete:
      tags: [Webhooks]
      summary: Delete Room Webhook
      operationId: deleteRoomWebhook
      responses:
        '204':
          description: Webhook deleted.
  /user:
    get:
      tags: [Users]
      summary: Get All Users
      description: List all users in the HipChat group.
      operationId: getAllUsers
      parameters:
      - $ref: '#/components/parameters/StartIndex'
      - $ref: '#/components/parameters/MaxResults'
      - name: include-guests
        in: query
        schema: {type: boolean, default: false}
      - name: include-deleted
        in: query
        schema: {type: boolean, default: false}
      responses:
        '200':
          description: User collection.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserCollection'
  /user/{id_or_email}:
    parameters:
    - name: id_or_email
      in: path
      required: true
      schema: {type: string}
    get:
      tags: [Users]
      summary: Get User Details
      operationId: getUser
      responses:
        '200':
          description: User profile.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
    put:
      tags: [Users]
      summary: Update User
      operationId: updateUser
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserUpdateRequest'
      responses:
        '204':
          description: User updated.
    delete:
      tags: [Users]
      summary: Delete User
      operationId: deleteUser
      responses:
        '204':
          description: User deleted.
  /user/{id_or_email}/message:
    parameters:
    - name: id_or_email
      in: path
      required: true
      schema: {type: string}
    post:
      tags: [Users, Messages]
      summary: Send Private Message To User
      description: Send a one-to-one private message. Requires the `send_message` scope.
      operationId: sendPrivateMessage
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [message]
              properties:
                message: {type: string, maxLength: 10000}
                notify: {type: boolean, default: false}
                message_format: {type: string, enum: [text, html], default: html}
      responses:
        '204':
          description: Message accepted.
  /emoticon:
    get:
      tags: [Emoticons]
      summary: Get All Emoticons
      operationId: getAllEmoticons
      parameters:
      - $ref: '#/components/parameters/StartIndex'
      - $ref: '#/components/parameters/MaxResults'
      - name: type
        in: query
        schema: {type: string, enum: [group, global, all], default: all}
      responses:
        '200':
          description: Emoticon collection.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmoticonCollection'
  /emoticon/{emoticon_id_or_shortcut}:
    parameters:
    - name: emoticon_id_or_shortcut
      in: path
      required: true
      schema: {type: string}
    get:
      tags: [Emoticons]
      summary: Get Emoticon Details
      operationId: getEmoticon
      responses:
        '200':
          description: Emoticon details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Emoticon'
  /addon:
    post:
      tags: [Add-ons]
      summary: Install Add-on
      description: Register a HipChat Connect add-on by submitting its descriptor URL.
      operationId: installAddon
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [url]
              properties:
                url: {type: string, format: uri}
      responses:
        '201':
          description: Add-on installed.
  /addon/{addon_key_or_id}/installable/{installable_id}:
    parameters:
    - name: addon_key_or_id
      in: path
      required: true
      schema: {type: string}
    - name: installable_id
      in: path
      required: true
      schema: {type: string}
    delete:
      tags: [Add-ons]
      summary: Uninstall Add-on Installation
      operationId: uninstallAddon
      responses:
        '204':
          description: Add-on installation removed.
  /session:
    get:
      tags: [Sessions]
      summary: Get Active Sessions
      operationId: getActiveSessions
      responses:
        '200':
          description: Active sessions list.
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items: {type: object}
components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: Pass the token as `Authorization: Bearer {token}`. Supports add-on, user, personal access,
        and room notification tokens.
    QueryToken:
      type: apiKey
      in: query
      name: auth_token
      description: Pass the token as the `auth_token` query parameter (legacy compatibility).
  parameters:
    RoomIdOrName:
      name: id_or_name
      in: path
      required: true
      description: Numeric room id or URL-encoded room name.
      schema: {type: string}
    StartIndex:
      name: start-index
      in: query
      schema: {type: integer, minimum: 0, default: 0}
    MaxResults:
      name: max-results
      in: query
      schema: {type: integer, minimum: 0, maximum: 1000, default: 100}
  schemas:
    RoomReference:
      type: object
      properties:
        id: {type: integer}
        name: {type: string}
        links:
          type: object
          properties:
            self: {type: string, format: uri}
    Room:
      allOf:
      - $ref: '#/components/schemas/RoomReference'
      - type: object
        properties:
          xmpp_jid: {type: string}
          statistics:
            type: object
            properties:
              messages_sent: {type: integer}
              last_active: {type: string, format: date-time}
          created: {type: string, format: date-time}
          is_archived: {type: boolean}
          privacy: {type: string, enum: [public, private]}
          is_guest_accessible: {type: boolean}
          topic: {type: string}
          participants:
            type: array
            items: {$ref: '#/components/schemas/UserReference'}
          owner:
            $ref: '#/components/schemas/UserReference'
          guest_access_url: {type: string, format: uri, nullable: true}
    RoomCollection:
      type: object
      properties:
        items:
          type: array
          items: {$ref: '#/components/schemas/RoomReference'}
        startIndex: {type: integer}
        maxResults: {type: integer}
        links:
          type: object
          properties:
            self: {type: string}
            next: {type: string}
    RoomCreateRequest:
      type: object
      required: [name]
      properties:
        name: {type: string, maxLength: 50}
        topic: {type: string, maxLength: 250}
        guest_access: {type: boolean, default: false}
        privacy: {type: string, enum: [public, private], default: public}
        owner_user_id: {type: string}
    RoomUpdateRequest:
      type: object
      properties:
        name: {type: string}
        topic: {type: string}
        is_archived: {type: boolean}
        privacy: {type: string, enum: [public, private]}
        owner:
          type: object
          properties:
            id: {type: string}
    NotificationRequest:
      type: object
      required: [message]
      properties:
        message: {type: string, maxLength: 10000}
        color: {type: string, enum: [yellow, green, red, purple, gray, random], default: yellow}
        notify: {type: boolean, default: false}
        message_format: {type: string, enum: [html, text], default: html}
        from: {type: string, maxLength: 64}
        attach_to: {type: string}
        card:
          type: object
          description: Optional rich-card payload (HipChat Cards).
    Message:
      type: object
      properties:
        id: {type: string}
        from:
          oneOf:
          - {$ref: '#/components/schemas/UserReference'}
          - type: object
            properties:
              name: {type: string}
        message: {type: string}
        date: {type: string, format: date-time}
        type: {type: string, enum: [message, notification, guest_access, topic]}
        color: {type: string}
        message_format: {type: string, enum: [html, text]}
        mentions:
          type: array
          items: {$ref: '#/components/schemas/UserReference'}
        file:
          type: object
          nullable: true
    MessageCollection:
      type: object
      properties:
        items:
          type: array
          items: {$ref: '#/components/schemas/Message'}
        startIndex: {type: integer}
        maxResults: {type: integer}
    UserReference:
      type: object
      properties:
        id: {type: integer}
        mention_name: {type: string}
        name: {type: string}
        links:
          type: object
          properties:
            self: {type: string, format: uri}
    User:
      allOf:
      - $ref: '#/components/schemas/UserReference'
      - type: object
        properties:
          email: {type: string, format: email}
          title: {type: string}
          presence:
            type: object
            properties:
              status: {type: string, enum: [chat, away, xa, dnd]}
              show: {type: string}
              idle: {type: integer}
              client:
                type: object
                properties:
                  type: {type: string}
                  version: {type: string}
          xmpp_jid: {type: string}
          is_group_admin: {type: boolean}
          is_guest: {type: boolean}
          is_deleted: {type: boolean}
          timezone: {type: string}
          last_active: {type: string, format: date-time}
          created: {type: string, format: date-time}
          photo_url: {type: string, format: uri}
    UserCollection:
      type: object
      properties:
        items:
          type: array
          items: {$ref: '#/components/schemas/UserReference'}
        startIndex: {type: integer}
        maxResults: {type: integer}
    UserUpdateRequest:
      type: object
      properties:
        name: {type: string}
        title: {type: string}
        mention_name: {type: string}
        is_group_admin: {type: boolean}
        timezone: {type: string}
        email: {type: string, format: email}
    Webhook:
      type: object
      properties:
        id: {type: string}
        name: {type: string}
        url: {type: string, format: uri}
        event:
          type: string
          enum: [room_message, room_notification, room_enter, room_exit, room_topic_change, room_archived,
            room_unarchived, room_deleted, room_created, room_file_upload]
        pattern: {type: string}
        authentication: {type: string, enum: [none, jwt], default: jwt}
        links:
          type: object
          properties:
            self: {type: string, format: uri}
    WebhookCreateRequest:
      type: object
      required: [url, event]
      properties:
        url: {type: string, format: uri}
        event: {type: string}
        pattern: {type: string}
        name: {type: string}
        authentication: {type: string, enum: [none, jwt], default: jwt}
    WebhookCollection:
      type: object
      properties:
        items:
          type: array
          items: {$ref: '#/components/schemas/Webhook'}
        startIndex: {type: integer}
        maxResults: {type: integer}
    Emoticon:
      type: object
      properties:
        id: {type: integer}
        shortcut: {type: string}
        url: {type: string, format: uri}
        creator:
          $ref: '#/components/schemas/UserReference'
        audio:
          type: array
          items:
            type: object
        height: {type: integer}
        width: {type: integer}
    EmoticonCollection:
      type: object
      properties:
        items:
          type: array
          items: {$ref: '#/components/schemas/Emoticon'}
        startIndex: {type: integer}
        maxResults: {type: integer}