Attendee is an open source API for managing meeting bots on platforms like Zoom or Google Meet. Bring meeting transcripts and recordings into your product in days instead of months.
See a quick demo of the API, check out the API reference or join the Slack Community.
Sign up for free on our hosted instance here.
Attendee is designed for convenient self-hosting. It runs as a Django app in a single Docker image. The only external services needed are Postgres and Redis. Directions for running locally in development mode here.
Meeting bots are powerful because they have access to the same audio and video streams as human users of meeting software. They power software like Gong or Otter.ai.
Building meeting bots is challenging across all platforms, though some have more support than others. Zoom provides a powerful SDK, but it is low-level and advanced features like per-participant audio streams are only available in the C++ variants of the SDK. Google Meet doesn't provide any support at all, so you need to run a full instance of Google Meet in Chrome.
Attendee abstracts away this complexity into a single developer friendly REST API that manages the state and media streams from these bots. If you're a developer building functionality that requires meeting bots, Attendee can save you months of work vs building from scratch.
Join a meeting with a POST request to /bots
:
curl -X POST https://app.attendee.dev/api/v1/bots \
-H 'Authorization: Token <YOUR_API_KEY>' \
-H 'Content-Type: application/json' \
-d '{"meeting_url": "https://us05web.zoom.us/j/84315220467?pwd=9M1SQg2Pu2l0cB078uz6AHeWelSK19.1", "bot_name": "My Bot"}'
Response:
{"id":"bot_3hfP0PXEsNinIZmh","meeting_url":"https://us05web.zoom.us/j/4849920355?pwd=aTBpNz760UTEBwUT2mQFtdXbl3SS3i.1","state":"joining","transcription_state":"not_started"}
The API will respond with an object that represents your bot's state in the meeting.
Make a GET request to /bots/<id>
to poll the bot:
curl -X GET https://app.attendee.dev/api/v1/bots/bot_3hfP0PXEsNinIZmh \
-H 'Authorization: Token <YOUR_API_KEY>' \
-H 'Content-Type: application/json'
Response:
{"id":"bot_3hfP0PXEsNinIZmh","meeting_url":"https://us05web.zoom.us/j/88669088234?pwd=AheaMumvS4qxh6UuDtSOYTpnQ1ZbAS.1","state":"ended","transcription_state":"complete"}
When the endpoint returns a state of ended
, it means the meeting has ended. When the transcription_state
is complete
it means the meeting recording has been transcribed.
Once the meeting has ended and the transcript is ready make a GET request to /bots/<id>/transcript
to retrieve the meeting transcripts:
curl -X GET https://app.attendee.dev/api/v1/bots/bot_3hfP0PXEsNinIZmh/transcript \
-H 'Authorization: Token mpc67dedUlzEDXfNGZKyC30t6cA11TYh' \
-H 'Content-Type: application/json'
Response:
[{
"speaker_name":"Noah Duncan",
"speaker_uuid":"16778240","speaker_user_uuid":"AAB6E21A-6B36-EA95-58EC-5AF42CD48AF8",
"timestamp_ms":1079,"duration_ms":7710,
"transcription":"You can totally record this, buddy. You can totally record this. Go for it, man."
},...]
You can also query this endpoint while the meeting is happening to retrieve partial transcripts.
To call the API you need the following
-
Attendee API Key - These are created in the Attendee UI by creating an account in your Attendee instance, signing in and navigating to the 'API Keys' section in the sidebar.
-
Zoom OAuth Credentials - These are the Zoom app client id and secret that uniquely identify your bot. We need these to join meetings. Directions on obtaining them here.
-
Deepgram API Key - We use Deepgram to generate recording transcripts. You can sign up for a free account here, no credit card required.
The Zoom OAuth credentials and Deepgram API key are entered into the Attendee UI in the 'Settings' section in the sidebar.
Attendee is in very early beta, but functionality is being added rapidly. If the API is missing something you need, then open an issue in the repository. PRs are also welcome!
- Navigate to Zoom Marketplace and register/log into your developer account.
- Click the "Develop" button at the top-right, then click 'Build App' and choose "General App".
- Copy the Client ID and Client Secret from the 'App Credentials' section
- Go to the Embed tab on the left navigation bar under Features, then select the Meeting SDK toggle.
For more details, follow this guide or watch this video.
- Build the Docker image:
docker compose -f dev.docker-compose.yaml build
(Takes about 5 minutes) - Create local environment variables:
docker compose -f dev.docker-compose.yaml run --rm attendee-app-local python init_env.py > .env
- Edit the
.env
file and enter your AWS information. - Start all the services:
docker compose -f dev.docker-compose.yaml up
- After the services have started, run migrations in a separate terminal tab:
docker compose -f dev.docker-compose.yaml exec attendee-app-local python manage.py migrate
- Goto localhost:8000 in your browser and create an account
- The confirmation link will be written to the server logs in the terminal where you ran
docker compose -f dev.docker-compose.yaml up
. Should look likehttp://localhost:8000/accounts/confirm-email/<key>/
. - Paste the link into your browser to confirm your account.
- You should now be able to log in, input your credentials and obtain an API key. API calls should be directed to http://localhost:8000 instead of https://app.attendee.dev.
Attendee is open source. TThe best way to contribute is to open an issue or join the Slack Community and let us know what you want to build.
See CONTRIBUTING.md for detailed instructions on how to contribute to Attendee.
- Join and leave Zoom meetings
- Transcripts
- API Reference
- Audio input / output
- Video input / output
- Google Meet support
- Speech support
- Automatically leave meetings
- Microsoft Teams support
- ZAK token and Join token support
- Scheduled meetings
- Webhooks for state changes
Have suggestions for the roadmap? Join the Slack Community or open an issue.