# hipchat_elixir


HipChat client library for [Elixir](

- [API Documentation](

## Policy

- Using Erlang's built-in `httpc` as HTTP client, for easier dependency management.
- No state. Access tokens and other credentials should be retrieved/stored by caller applications.
- Relying on HipChat cloud for parameter validations.
- Covering APIs used in server side only.
- Generating codes from Swagger (OpenAPI) specifications in [ymtszw/hipchat_swagger](
    - Read more in [here][contributions].


## Basic Usage

0. Add [`:hipchat_elixir`]( as a dependency.
1. Create client struct (``).
    - Pass `access_token` if the targeted API requires authentication.
    - See [here]( for details.
2. Pass the resultant client and other parameters to the targeted API function.

  |> Hipchat.V2.Rooms.send_room_notification("room_id", %{message: "Hello HipChat!"})
  # {:ok, %Hipchat.Httpc.Response{body: "", headers: ..., status: 204}}

## About `Content-Type`

Request bodies are sent as `content-type: application/json` or
`content-type: x-www-form-urlencoded` depending on `:serializer` config value.

- See [`config/config.exs`]( for example.
- Some HipChat APIs (implicitly) require `content-type: application/json`,
  so **introducing JSON serializer is almost mandatory**.
    - Currently only supports [`Poison`](

## Status

Basic chat related APIs (CRUD operation of rooms/users, sending messages/notifications, etc) are covered.

Many add-on (extension) related APIs are not covered.
Since HipChat itself is sunsetting and moving toward [Stride](,
I may not revisit to perfect these. If interested, [contributions] are welcomed.

Only supports HipChat cloud (not HipChat server).

# License