The main features of the REST API are: creating and removing Chat Rooms, adding/removing users to
Chat Rooms and generating and expiring Websocker Server access tokens. The typical flow for those
scenarios are shown in the diagram below.
[1] - Client app makes a request to your back end service. Your back end authenticates the user and
checks all permissions, per your custom business logic.
[2] - Your back end service makes server-to-server REST API call to the I2A Chat REST API.
[3] - Your back end service receives a JSON response from the I2A Chat REST API.
[4] - Your back end service returns response to the Client App. Again, it's entirely up to you and
your app requirements what data you include in the response.
This architecture allows your backend to implement any custom chat-related logic on your end. For example
assume you want users under 13 years of age invite to their Chat Rooms only their peers or younger. Or
you want only adult users to create chat rooms. Or you want only premium users to be able to create
group conversations. For obvious reasons, I2A Chat Service cannot implement all types of such
requirements on its end. Your backend is where all that custom checks should happen, as
described in step [1].
Your Back End Is The Source of Truth
Your back end service is considered to be the source of truth about users, their permissions etc. it
handles all authentication and authorization related logic.
As you may have already noticed, your back end service is also considered to be the source of truth
about Chat Rooms and User - Chat Room relations (who's in which Chat Room). Each time you
create or remove a new Chat Room or join / kick user from a Chat Room via
the REST API your back end service must update that information in its database. So, for example,
when a user wants to list all chat rooms they're in, you have that information:
[1] and [2] here are request and response communication between your client and server apps to get
a list of Chat Rooms or get information who's in which Chat Room.
What if the Client app wants to know something you don't have? For example, it wants to show the last
message written in given Chat Room, wants to know the time of that message, or wants to know how
many unread messages user has in given Chat Room? Those type of requests are to be
made via the WebSocket.
REST API Root URL:
- Sandbox environment: https://chat-server-stg.i2asolutions.com
- Production environment: TODO
Authentication:
All HTTP calls to the REST API must include a header X-Application-Secret where you pass your App's
Secret. Secret is generated automatically when you create a new App in the
I2A Chat Management Panel.
IMPORTANT: the App Secret should be known only by your own server. Never put App Secret in
the client app. To remind you of that, all REST API paths are prefixed with /server-to-server/
indicating that they shall be called only from your server.
This operation pings the API to check whether it's alive.
Request
Empty
Response
200 OK
Creates new Chat Websocket Server session and returns an access token for the Client App to connect
to the server.
Request
{
device_identifier: string
fcm_token: string
application_user_identifier: string
custom_data: string
}
Response
{
token: string
}
Creates new session. Neque vitae tempus quam pellentesque nec nam aliquam sem et. Odio aenean sed
adipiscing tristique risus nec. Erat imperdiet sed euismod nisi porta lorem mollis. Scelerisque
fermentum
dui faucibus in ornare. Tristique et egestas quis ipsum suspendisse. Non sodales neque sodales ut etiam
sit
amet. Nunc vel risus commodo viverra maecenas accumsan lacus. Augue eget arcu dictum varius duis at
consectetur lorem donec. Pellentesque sit amet porttitor eget dolor morbi. Malesuada nunc vel risus
commodo
viverra maecenas accumsan lacus. Risus commodo viverra maecenas accumsan lacus vel facilisis. Ultrices
dui
sapien eget mi proin sed libero enim. Ullamcorper a lacus vestibulum sed.
Request
{
token: string
}
Response
200 OK
Creates new session. Neque vitae tempus quam pellentesque nec nam aliquam sem et. Odio aenean sed
adipiscing tristique risus nec. Erat imperdiet sed euismod nisi porta lorem mollis. Scelerisque
fermentum
dui faucibus in ornare. Tristique et egestas quis ipsum suspendisse. Non sodales neque sodales ut etiam
sit
amet. Nunc vel risus commodo viverra maecenas accumsan lacus. Augue eget arcu dictum varius duis at
consectetur lorem donec. Pellentesque sit amet porttitor eget dolor morbi. Malesuada nunc vel risus
commodo
viverra maecenas accumsan lacus. Risus commodo viverra maecenas accumsan lacus vel facilisis. Ultrices
dui
sapien eget mi proin sed libero enim. Ullamcorper a lacus vestibulum sed.
Request
{
application_users_identifiers: list[string]
}
Response
{
identifier: string
}
Creates new session. Neque vitae tempus quam pellentesque nec nam aliquam sem et. Odio aenean sed
adipiscing tristique risus nec. Erat imperdiet sed euismod nisi porta lorem mollis. Scelerisque
fermentum
dui faucibus in ornare. Tristique et egestas quis ipsum suspendisse. Non sodales neque sodales ut etiam
sit
amet. Nunc vel risus commodo viverra maecenas accumsan lacus. Augue eget arcu dictum varius duis at
consectetur lorem donec. Pellentesque sit amet porttitor eget dolor morbi. Malesuada nunc vel risus
commodo
viverra maecenas accumsan lacus. Risus commodo viverra maecenas accumsan lacus vel facilisis. Ultrices
dui
sapien eget mi proin sed libero enim. Ullamcorper a lacus vestibulum sed.
Request
{
application_users_identifiers: list[string]
}
Response
{
identifier: string
}
Creates new session. Neque vitae tempus quam pellentesque nec nam aliquam sem et. Odio aenean sed
adipiscing tristique risus nec. Erat imperdiet sed euismod nisi porta lorem mollis. Scelerisque
fermentum
dui faucibus in ornare. Tristique et egestas quis ipsum suspendisse. Non sodales neque sodales ut etiam
sit
amet. Nunc vel risus commodo viverra maecenas accumsan lacus. Augue eget arcu dictum varius duis at
consectetur lorem donec. Pellentesque sit amet porttitor eget dolor morbi. Malesuada nunc vel risus
commodo
viverra maecenas accumsan lacus. Risus commodo viverra maecenas accumsan lacus vel facilisis. Ultrices
dui
sapien eget mi proin sed libero enim. Ullamcorper a lacus vestibulum sed.
Request
{
application_users_identifiers: list[string]
}
Response
{
identifier: string
}
Creates new session. Neque vitae tempus quam pellentesque nec nam aliquam sem et. Odio aenean sed
adipiscing tristique risus nec. Erat imperdiet sed euismod nisi porta lorem mollis. Scelerisque
fermentum
dui faucibus in ornare. Tristique et egestas quis ipsum suspendisse. Non sodales neque sodales ut etiam
sit
amet. Nunc vel risus commodo viverra maecenas accumsan lacus. Augue eget arcu dictum varius duis at
consectetur lorem donec. Pellentesque sit amet porttitor eget dolor morbi. Malesuada nunc vel risus
commodo
viverra maecenas accumsan lacus. Risus commodo viverra maecenas accumsan lacus vel facilisis. Ultrices
dui
sapien eget mi proin sed libero enim. Ullamcorper a lacus vestibulum sed.
Request
Empty
Response
204 NO CONTENT
Creates new session. Neque vitae tempus quam pellentesque nec nam aliquam sem et. Odio aenean sed
adipiscing tristique risus nec. Erat imperdiet sed euismod nisi porta lorem mollis. Scelerisque
fermentum
dui faucibus in ornare. Tristique et egestas quis ipsum suspendisse. Non sodales neque sodales ut etiam
sit
amet. Nunc vel risus commodo viverra maecenas accumsan lacus. Augue eget arcu dictum varius duis at
consectetur lorem donec. Pellentesque sit amet porttitor eget dolor morbi. Malesuada nunc vel risus
commodo
viverra maecenas accumsan lacus. Risus commodo viverra maecenas accumsan lacus vel facilisis. Ultrices
dui
sapien eget mi proin sed libero enim. Ullamcorper a lacus vestibulum sed.
Request
{
chat_room_identifier: string
message: string
}
Response
200 OK
Flags a chat message as inappropriate content. Neque vitae tempus quam pellentesque nec nam aliquam sem et. Odio aenean sed
adipiscing tristique risus nec. Erat imperdiet sed euismod nisi porta lorem mollis. Scelerisque
fermentum
dui faucibus in ornare. Tristique et egestas quis ipsum suspendisse. Non sodales neque sodales ut etiam
sit
amet. Nunc vel risus commodo viverra maecenas accumsan lacus. Augue eget arcu dictum varius duis at
consectetur lorem donec. Pellentesque sit amet porttitor eget dolor morbi. Malesuada nunc vel risus
commodo
viverra maecenas accumsan lacus. Risus commodo viverra maecenas accumsan lacus vel facilisis. Ultrices
dui
sapien eget mi proin sed libero enim. Ullamcorper a lacus vestibulum sed.
Request
{
application_user_identifier: string
message_timestamp_identifier: integer
chat_room_identifier: string
report_type*: string/integer
message*: string
}
Response
200 OK