TalkJS lets you call its API with your Backend in order to send messages. We expect to add functionality to the API quickly - let us know if you have any requests!

The API is REST-based, using HTTP and JSON. The API only accepts authenticated calls over HTTPS, and uses HTTP status codes for reporting results.

Content Type

Only requests with Content-type: application/json are accepted (except for HTTP GET requests, which have no content).


Authenticate your account when using this API by including the secret key in the request. You can see your secret API key in the dashboard. Do not share private keys with anyone else and don't use them in your frontend code. They are intended to be used only from your server-side application.

Authentication is performed with the "Authorization" header. Simply put your private key in the following format:

Authorization: Bearer YOUR_SECRET_KEY

Return values

TalkJS uses HTTP status codes to indicate whether the request was fine or not. TalkJS always returns HTTP status 200 if a request was processed successfully.

Statuses 4xx mean that the user input was not correct, to be more precise:

  • 400 means that the arguments passed were not correct
  • 401 means that the "Authorization" header with the token was not present or was incorrect.
  • 404 means that the resource could not be located.

Very rarely TalkJS, may return status 5xx, indicating that something went wrong on the TalkJS servers. This may indicate a bug in TalkJS, but it might also be unexpected downtime. Treat this as you would a connection error; you can safely retry this operation.

The HTTP status code is the only way to verify whether a call was successful. Do not inspect the response body for determining this!

All API responses are JSON. Even calls that return no data have a {} response.


Most of our resources have support for "listing". You can list users, conversations or messages. They all share the same response structure and the same arguments. Currently, the only accepted parameter is limit, that must be a number between 1 and 100, that defaults to 10 (if not passed). The response is a json object containing a field called data that keeps an array of requested resources.