Dyte REST API Quickstart
Dyte's API follows the REST principles. It has predictable resource-oriented URLs, accepts JSON-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs.
This topic describes how to get started with Dyte v2 REST APIs.
Before getting started with this quickstart guide, we recommend that you read Getting Started with Dyte to familiarize yourself with Dyte.
Objectives​
In this quickstart you'll learn:
- How to access Dyte APIs
- How to authenticate the requests
- How to create presets
- How to add voice and video calls to your applications using Dyte APIs
Initial Setup​
Perform the following steps to get started with Dyte APIs:
Step 1: Access APIs​
You can access all of our v2 API endpoints at https://api.dyte.io/v2/
.
For the complete list of routes, see API documentation.
Step 2: Authenticate using your API Keys​
Dyte's APIs use API Keys to authenticate requests via
HTTP Basic Auth. To
perform the authentication, an HTTP request is sent with an Authorization header
that contains the word Basic followed by a space and a base64-encoded string
organizationId:apiKey
.
For example, Authorization: Basic ZGVtbzpwQDU1dzByZA==
- First, register on our Developer Portal.
- Copy the API Key for your organization. This API Key is unique to your organization. The organization ID acts as the username, and the API Key is your password.
Step 3: Create Presets​
Create presets using the Developer portal. A preset is a set of permissions and UI configurations that is applied to a participant.
Add Video Calls to your Application using Dyte APIs​
This section focuses on how to add voice and video calls to your applications using Dyte APIs. A typical workflow includes the following steps:
- Create a meeting
- Add participants to the meeting
- Record the meeting
- Receive events using webhooks
Step 1: Create a Meeting​
You must first create a meeting in order to begin using Dyte for voice and video calls.
Request​
This request returns a parameter called id
, which is your meeting ID
. The
meeting ID is required for subsequent operations like adding participants.
curl --request POST \
--url https://api.dyte.io/v2/meetings \
--header 'Authorization: Basic ZGV2QGR5dGUuaW46MTIzNDU2Nzg5YXNkaGZnaGo=' \
--header 'Content-Type: application/json' \
--data '{
"title": "Sample meeting",
"preferred_region": "ap-south-1",
"record_on_start": false
}'
Response​
{
"success": true,
"data": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"preferred_region": "ap-south-1",
"waiting_room": true,
"record_on_start": true,
"created_at": "2019-08-24T14:15:22Z",
"updated_at": "2019-08-24T14:15:22Z"
}
}
Step 2: Add Participants​
Once you've created a meeting, you can add participants to the meeting.
Request​
This request returns a token, which is required to initialize the frontend SDKs.
The preset name created earlier must be passed in the request.
curl --request POST \
--url https://api.dyte.io/v2/meetings/<meetingId>/participants \
--header 'Authorization: Basic ZGV2QGR5dGUuaW46MTIzNDU2Nzg5YXNkaGZnaGo=' \
--header 'Content-Type: application/json' \
--data '{
"name": "Mary Sue",
"picture": "https://i.imgur.com/test.jpg",
"preset_name": "string",
"client_specific_id": "string"
}'
Response​
{
"success": true,
"data": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "string",
"picture": "http://example.com",
"client_specific_id": "string",
"preset_name": "string",
"created_at": "2019-08-24T14:15:22Z",
"updated_at": "2019-08-24T14:15:22Z",
"token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJvcmdJZCI6IjM5MGJmMjc0LTQxMzMtNDI2ZC04NDkxLWVhN2ExYTE5MDQ4YiIsIm1lZXRpbmdJZCI6ImY5MTMzODM0LWE4MmYtNGNhYi05OTRiLWY3M2RiMmQwNmY4OCIsInBhcnRpY2lwYW50SWQiOiIxZDVhNTkyMy1iYzY5LTQ5ZDAtODJhNy1lZDIzZmE0ZTUyZWYiLCJwcmVzZXRJZCI6Ijg3NzNiZDAzLTkzNjItNDdjNy1hNzlkLThmNTQxMWMyNDc2NiIsImlhdCI6MTY2OTgzMDE5OCwiZXhwIjoxNjc4NDcwMTk4fQ.ngSKuI24JHtPxiimrGT1Vkk7_AdvrMRwkbltvlWpyWmmm14-Kl4OUVw2nm7q0S2uEgw7xXRz8faxzzJTMogkKlUSXGXOpUc_lXYH9h7u29MCFf3nJDy_FZIsSgPmULLoF3p4OlU9wNSwEnO0h856PdB4MfAuXxa24vkgI1tplzBPOS4NcW9x8pfE7J98ixVZKcPvqNig_pLOypy0j5Pd3CHdi25EFml1Fr0iyui4hDrjE-mzMnYwvojkXSb47MSxVoOLGvWn__dL2qrPSho4C3fhb_HEupWAzCHMDBpl1IGhazN1-mZ40WNYsKFFcch89qOsr0dA2C_d0PHVzCVP3A"
}
}
Step 3: Record the Meeting​
You can manage your recordings in Dyte using Basic
or Bearer
authentication
methods. If you're using Bearer
authentication, then you need to use the
token
returned by the Add Participants API
request.
Start recording​
storage_config
is an optional parameter. If you specify the storage
configuration, the recording will be stored in your S3 bucket as well.
Request​
curl --request POST \
--url https://api.dyte.io/v2/recordings \
--header 'Authorization: Basic MzkwYmYyNzQtNDEzMy00MjZkLTg0OTEtZWE3YTFhMTkwNDhiOjdmYTQzNjAwZjk3ZTVkZGI5NmIw' \
--header 'Content-Type: application/json' \
--data '{
"meeting_id": "97440c6a-140b-40a9-9499-b23fd7a3868a",
"storage_config": {
"type": "aws",
"access_key": "string",
"secret_key": "string",
"region": "us-east-1",
"bucket": "string",
"path": "string"
}
}'
Response​
{
"success": true,
"data": {
"id": "a776cc7e-54b8-4915-a748-8afc6bf98140",
"download_url": null,
"download_url_expiry": null,
"file_size": null,
"session_id": null,
"output_file_name": "d9fc4d6a-a5a0-4430-9a73-d4ba14e597f9_1669882270392.mp4",
"status": "INVOKED",
"invoked_time": "2022-12-01T08:11:10.430Z",
"started_time": null,
"stopped_time": null,
"storage_config": {
"id": "5f48f84c-4628-44b8-8953-64c67c714de7",
"type": "aws",
"region": "ap-south-1",
"bucket": "dyte",
"path": "/"
}
}
}
Stop recording​
Request​
curl --request PUT \
--url https://api.staging.dyte.in/v2/recordings/<recordingId> \
--header 'Authorization: Basic NzBjNWQzOTEtNGJhYy00Y2YzLTk5MDctYmVjMjA1Nzk4YWRiOmQyNzBmYjJmOGNiNGUzZWY1MGI1' \
--header 'Content-Type: application/json' \
--data '{
"action": "stop"
}'
Response​
The UPLOADING
status indicates that the recording is still being uploaded to
the server asynchronously. The upload process may take longer depending on the
size of the file.
To monitor the status of recordings, you can listen to the
recording.statusUpdate
events using webhooks.
{
"success": true,
"data": {
"id": "a776cc7e-54b8-4915-a748-8afc6bf98140",
"download_url": null,
"download_url_expiry": null,
"file_size": null,
"session_id": "622dfa7b-ae00-4ba1-bba0-d6d0cc9e6c7d",
"output_file_name": "d9fc4d6a-a5a0-4430-9a73-d4ba14e597f9_1669882270392.mp4",
"status": "UPLOADING",
"invoked_time": "2022-12-01T08:11:10.430Z",
"started_time": "2022-12-01T08:11:12.023Z",
"meeting": {
"waiting_room": false,
"id": "d9fc4d6a-a5a0-4430-9a73-d4ba14e597f9",
"title": "Backend Standup",
"record_on_start": false,
"created_at": "2022-12-01T07:01:23.990Z",
"updated_at": "2022-12-01T07:01:23.990Z"
},
"storage_config": {
"id": "5f38f84c-4628-44b8-8953-64c67c714de7",
"type": "aws",
"region": "ap-south-1",
"bucket": "dyte",
"path": "/"
}
}
}