<a href="https://docs.attendee.dev/">Documentation</a>
·
<a href="https://attendee.dev/">Website</a>
·
<a href="https://join.slack.com/t/attendee-community/shared_invite/zt-3l43ns8cl-G8YnMccWVTugMlloUtSf9g">Slack</a>
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.
Sign up for free on our hosted instance here.
Interested in using Attendee at your company? Schedule a call here. By self-hosting Attendee you can reduce costs by 10x compared to closed source vendors.
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 - Needed to join Zoom meetings. These are the Zoom app client id and secret that uniquely identify your bot. Directions on obtaining them here.
Deepgram API Key - Needed for transcribing Zoom meetings. You can sign up for an account here, no credit card required and get 400 hours worth of free transcription.
The Zoom OAuth credentials and Deepgram API key are entered into the Attendee UI in the 'Settings' section in the sidebar.
We are rapidly adding features to Attendee. If the API is missing something you need, then open an issue in the repository or bring it up in the Slack Community. PRs are also welcome!
For more details, follow this guide or watch this video.
docker compose -f dev.docker-compose.yaml build (Takes about 5 minutes)docker compose -f dev.docker-compose.yaml run --rm attendee-app-local python init_env.py > .envdocker compose -f dev.docker-compose.yaml run --rm attendee-app-local python init_env.py | Out-File -Encoding utf8 .env .env file and enter your AWS information.docker compose -f dev.docker-compose.yaml updocker compose -f dev.docker-compose.yaml exec attendee-app-local python manage.py migratedocker compose -f dev.docker-compose.yaml up. Should look like http://localhost:8000/accounts/confirm-email/<key>/.Attendee is open source. The 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.
Have suggestions for the roadmap? Join the Slack Community or open an issue.
$ claude mcp add attendee \
-- python -m otcore.mcp_server <graph>