BizCrush 개발자

BizCrush API

AI 기반 미팅 플랫폼 API. 실시간 및 배치 음성 인식 서비스를 구축하고, 미팅 관리, AI 요약 등 다양한 기능을 활용하세요.

15개 언어 자동 감지 — 설정 없이 오디오를 보내면 바로 결과를 받을 수 있습니다.

MCP 서버, 음성 기반 앱, AI 워크플로우를 구축해 보세요.

Beta 이 API는 현재 베타 버전입니다. 엔드포인트 및 동작이 사전 고지 없이 변경될 수 있습니다.

API Key 발급

BizCrush API를 사용하려면 API Key가 필요합니다. 계정 설정에서 최대 5개까지 생성할 수 있습니다.

API Key 발급

Speech-to-Text API

Featured

Speech-to-Text API for audio transcription with speaker diarization. Supports file-based (batch) and real-time (streaming) transcription.

나만의 STT 서비스 구축

Use the BizCrush STT API to build your own speech-to-text service. Integrate real-time transcription into your apps, process audio files at scale, or create custom voice-powered workflows — all with speaker diarization and multi-language support.

15개 언어 자동 감지 — 설정 없이 오디오를 보내면 바로 결과를 받을 수 있습니다.

개요

Base URL https://extapi.bizcrush.ai/v1

인증

모든 STT 요청은 쿼리 파라미터로 API 키를 전달해야 합니다:

?api_key=YOUR_API_KEY

API Key는 bizcru.sh/settings에서 발급할 수 있습니다.

파일 STT

오디오 파일 URL을 전송하면 화자 분리가 포함된 전체 트랜스크립트를 받을 수 있습니다.

POST /stt 인증: ?api_key

Transcribe an audio file URL and return the full transcript with speaker diarization.

요청 본문 (JSON)

이름 타입 필수 여부 설명
audio_url string 필수 Public audio file URL (signed URL, CDN URL, etc.)
session_id string 선택 Session identifier. Auto-generated if omitted
enable_diarization boolean 선택 Enable speaker diarization (default: true)
language_hints string[] 선택 Language codes, e.g. ["ko","en"] or "ko,en". Up to 3; extras dropped. Omit for auto-detection. Legacy `language_hint` (single string) also accepted.

응답 필드

필드 타입 설명
text string Full transcript text
detected_language string Detected language code
confidence float Average confidence (0~1)
utterances array Speaker-diarized utterance segments
utterances[].speaker string Speaker number ("0", "1", "2", ...)
utterances[].text string Utterance text
utterances[].start_ms integer Start time (milliseconds)
utterances[].end_ms integer End time (milliseconds)
utterances[].confidence float Utterance confidence
utterances[].language string Utterance language

응답 예시

{
  "text": "Could you introduce yourself and tell us about your role?",
  "detected_language": "en",
  "confidence": 0.961,
  "utterances": [
    {
      "speaker": "1",
      "text": "Could you introduce yourself and tell us about your role?",
      "start_ms": 960,
      "end_ms": 5400,
      "confidence": 0.94,
      "language": "en"
    },
    {
      "speaker": "2",
      "text": "Sure. My name is Ethan Kim, and I'm CTO of BizCrush.",
      "start_ms": 5820,
      "end_ms": 9600,
      "confidence": 0.96,
      "language": "en"
    }
  ]
}

cURL 예시

curl -X POST \
  "https://extapi.bizcrush.ai/v1/stt?api_key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"audio_url": "https://example.com/audio.oga", "enable_diarization": true}'

참고: Response time depends on audio length — may take up to several minutes. Set timeout to 600+ seconds.

실시간 STT (WebSocket)

Real-time audio streaming transcription via WebSocket. Send audio chunks and receive interim/final results in real time.

WS wss://extapi.bizcrush.ai/v1/stt/stream

쿼리 파라미터

이름 타입 필수 여부 설명
api_key string 필수 API key
format string 선택 "json" for JSON text frames, omit for protobuf binary
reduce_noise string 선택 "true" to enable real-time noise reduction
language_hints string[] 선택 Language codes as comma-separated (?language_hints=ko,en) or repeated (?language_hints=ko&language_hints=en). Up to 3; extras dropped. Omit for auto-detection.

프로토콜

1 Send Config

Send a JSON text frame with encoding and optional session_id

필드 타입 설명
encoding string "pcm16" or "opus" (default: "pcm16")
session_id string Session identifier (optional, auto-generated if omitted)
language_hints string[] Optional language codes, e.g. ["ko","en"] or "ko,en". Up to 3 entries; extras dropped. Overrides query param. Omit for auto-detection.
{"encoding": "pcm16", "session_id": "optional-session-id"}
2 Receive Connection Status

Server responds with connection status

{"connected": true}
3 Stream Audio

Send raw audio as binary WebSocket frames

인코딩 포맷 청크 크기
pcm16 16kHz, mono, 16-bit little-endian 640 bytes (20ms) recommended
opus 16kHz, mono. Raw Opus packets or OGG/Opus container Opus frame unit
4 Receive Transcription Results

Server sends interim and final results as JSON text frames

필드 타입 설명
chunk.id string Chunk ID — same across interim/final for one utterance, new ID after final
chunk.session_id string Session ID
chunk.text string Transcribed text (cumulative — each interim contains full text so far)
chunk.is_final boolean false: interim result, true: final confirmed result
{"chunk": {"id": "01KMCHP57H31XYZABC", "session_id": "my-session", "text": "Hello, how are you?", "is_final": true}}

예제

Python

import asyncio
import json
import websockets

async def live_stt(api_key: str):
    url = f"wss://extapi.bizcrush.ai/v1/stt/stream?api_key={api_key}&format=json"

    async with websockets.connect(url) as ws:
        await ws.send(json.dumps({"encoding": "pcm16"}))

        resp = json.loads(await ws.recv())
        assert resp["connected"], f"Connection failed: {resp}"

        async def send_audio():
            with open("audio.pcm", "rb") as f:
                while chunk := f.read(640):
                    await ws.send(chunk)
                    await asyncio.sleep(0.02)
            await asyncio.sleep(3)
            await ws.close()

        async def receive_results():
            try:
                async for msg in ws:
                    data = json.loads(msg)
                    if "chunk" in data:
                        chunk = data["chunk"]
                        status = "FINAL" if chunk["is_final"] else "interim"
                        print(f"[{status}] {chunk['text']}")
            except websockets.exceptions.ConnectionClosed:
                pass

        await asyncio.gather(send_audio(), receive_results())

asyncio.run(live_stt("YOUR_API_KEY"))

JavaScript (Browser)

const ws = new WebSocket(
  "wss://extapi.bizcrush.ai/v1/stt/stream?api_key=YOUR_API_KEY&format=json"
);

ws.onopen = () => {
  ws.send(JSON.stringify({ encoding: "pcm16" }));
};

ws.onmessage = (event) => {
  const data = JSON.parse(event.data);

  if (data.connected) {
    console.log("Connected! Start sending audio...");
  }

  if (data.chunk) {
    const { id, text, is_final } = data.chunk;
    console.log(`[${is_final ? "FINAL" : "interim"}] ${text}`);
  }
};

function sendAudioChunk(pcmData) {
  if (ws.readyState === WebSocket.OPEN) {
    ws.send(pcmData);
  }
}

음성 합성 (TTS)

텍스트를 자연스러운 음성으로 변환하고 서명된 다운로드 URL을 반환합니다 (오디오는 Firebase Storage에 업로드됩니다).

POST /tts 인증: ?api_key

Generate speech audio from text and return a signed download URL (audio uploaded to Firebase Storage at tts/{session_id}/{message_id}.ogg).

요청 본문 (Protobuf)

application/x-protobuf (request and response are protobuf-encoded SessionTTSRequest / SessionTTSResponse)

이름 타입 필수 여부 설명
session_id string 필수 Session identifier
message_id string 필수 Message identifier (used in storage path)
text string 필수 Text to convert to speech

응답 필드

필드 타입 설명
audio_url string Signed download URL (Opus / OGG) — valid for several days
error string Set on failure; audio_url empty
오디오 포맷
OGG/Opus, single channel
기본 목소리
nova (configurable server-side)

오디오 소음 제거

BizCrush AI를 사용하여 오디오 파일의 배경 소음을 제거합니다. 다운로드 URL을 제공하면 소음이 제거된 M4A 파일을 반환합니다.

POST /v1/denoise X-API-Key

Denoise an audio file using BizCrush AI. Provide a download URL; the server applies noise reduction, re-encodes to M4A (AAC), and returns a signed download URL valid for 1 hour.

요청 본문

이름 타입 필수 여부 설명
audio_url string 필수 Input audio file download URL (any format supported by ffmpeg)

응답 필드

필드 타입 설명
denoised_audio_url string Signed download URL for the denoised M4A file (valid ~1 hour)

지원 언어

자동 언어 감지가 기본 내장되어 있어 별도 설정이 필요 없습니다. STT 엔진이 15개 언어를 자동으로 감지하고, 대화 중 언어가 바뀌어도 매끄럽게 처리합니다. language_hint를 사용하면 더 빠르게 감지할 수 있습니다.

코드 언어
en English
zh 中文
hi हिन्दी
es Español
ar العربية
fr Français
pt Português
ru Русский
id Bahasa Indonesia
de Deutsch
ja 日本語
vi Tiếng Việt
it Italiano
ko 한국어
th ภาษาไทย

STT 오류 코드

상태 오류 설명
401 Missing authorization API key not provided
401 Invalid API key Invalid API key
400 Empty request body Request body is empty
400 Missing audio_url audio_url field missing (File STT)
400 Missing session_id, message_id, or text Required TTS field missing
400 Invalid JSON JSON parsing failed
500 TTS generation failed OpenAI TTS call failed
500 Storage upload failed Firebase Storage upload failed
500 (varies) Internal server error (transcription failure, etc.)
WS 1008 Auth failure WebSocket closed with code 1008 on authentication failure

미팅 REST API

인증

모든 API 요청에는 X-API-Key 헤더가 필요합니다.

curl -X POST https://extapi.bizcrush.ai/v1/get-meetings \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{}'

API Key는 bizcru.sh/settings에서 발급할 수 있습니다.

빠른 시작

한 번의 요청으로 미팅을 생성하고 참가자를 초대하세요:

curl -X POST https://extapi.bizcrush.ai/v1/create-meeting \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{
    "participant_ids": ["em:john@example.com"],
    "title": "Weekly Standup"
  }'

응답:

{
  "meeting": {
    "id": "01KNGVN84KR7T5CVDY9TTW7FFW",
    "host_user_id": "0J56UlxXAS",
    "participant_ids": ["0J56UlxXAS", "em:john@example.com"],
    "status": "MS_LIVE",
    "title": "Weekly Standup",
    "language": "ko",
    "translation_languages": ["ko", "en"]
  }
}

Meetings

Create, delete, and list meetings.

POST /v1/create-meeting

Create a new meeting and optionally invite participants.

파라미터

이름 타입 필수 여부 설명
participant_ids list[str] 선택 Participant IDs. Formats: userId (no prefix), em:email@example.com
title str 선택 Meeting title
POST /v1/delete-meeting

Delete a meeting by ID.

파라미터

이름 타입 필수 여부 설명
meeting_id str 필수 Meeting ID to delete
POST /v1/get-meetings

List the authenticated user's meetings, newest first.

파라미터

이름 타입 필수 여부 설명
last_updated_at str 선택 Pagination cursor: fetch meetings updated before this time (RFC 3339)
limit int 선택 Max results per page (default: 50, max: 50)

Meeting Messages

Send, delete, and list meeting messages (text, summaries, etc.).

POST /v1/send-meeting-message

Send a text message to a meeting.

파라미터

이름 타입 필수 여부 설명
meeting_message dict 필수 Meeting message object with meeting_id and text fields
POST /v1/delete-meeting-message

Delete a message from a meeting.

파라미터

이름 타입 필수 여부 설명
meeting_id str 필수 Meeting ID
message_id str 필수 Message ID to delete
POST /v1/get-meeting-messages

Get messages for a meeting (summaries, user messages, etc.).

파라미터

이름 타입 필수 여부 설명
meeting_id str 필수 Meeting ID
last_updated_at str 선택 Pagination cursor (RFC 3339)
limit int 선택 Max results per page (default: 50)

Meeting AI

AI-powered meeting summarization and Q&A.

POST /v1/summarize-meeting

Generate an AI summary of a meeting.

파라미터

이름 타입 필수 여부 설명
meeting_id str 필수 Meeting ID to summarize
send_email_to_participants bool 선택 Send summary email to participants (default: false)
user_prompt str 선택 Custom prompt to guide summarization
POST /v1/ask-ai-for-meeting

Ask AI a question about a meeting's content.

파라미터

이름 타입 필수 여부 설명
meeting_id str 필수 Meeting ID
message dict 필수 User question as {text: '...'} object
model int 선택 LLM model enum value (0 = default)
attachment_urls list[str] 선택 Attachment URLs (PDF, images, etc.)
source_content str 선택 Existing markdown to edit (edit mode)
source_document_id str 선택 Document ID for version chaining

Meeting Cached Data

Retrieve cached meeting summaries and transcripts.

POST /v1/get-meeting-summary

Get the AI-generated summary of a meeting (cached).

파라미터

이름 타입 필수 여부 설명
meeting_id str 필수 Meeting ID
force_refresh bool 선택 Force refresh from DB instead of cache
POST /v1/get-meeting-transcripts

Get the full transcripts of a meeting (cached).

파라미터

이름 타입 필수 여부 설명
meeting_id str 필수 Meeting ID
force_refresh bool 선택 Force refresh from DB instead of cache

Meeting Participants

Add/remove participants and manage co-host roles.

POST /v1/add-meeting-participants

Add participants to a meeting.

파라미터

이름 타입 필수 여부 설명
meeting_id str 필수 Meeting ID
participant_ids list[str] 필수 Participant IDs. Formats: userId, em:email@example.com
POST /v1/remove-meeting-participants

Remove participants from a meeting.

파라미터

이름 타입 필수 여부 설명
meeting_id str 필수 Meeting ID
participant_ids list[str] 필수 Participant IDs to remove
POST /v1/assign-co-host

Assign co-host role to users in a meeting.

파라미터

이름 타입 필수 여부 설명
meeting_id str 필수 Meeting ID
user_ids list[str] 필수 User IDs to assign as co-host
POST /v1/remove-co-host

Remove co-host role from users in a meeting.

파라미터

이름 타입 필수 여부 설명
meeting_id str 필수 Meeting ID
user_ids list[str] 필수 User IDs to remove co-host from

Meeting Settings

Get and update default meeting settings (languages, keywords).

POST /v1/get-user-default-meeting-setting

Get the user's default meeting settings.

파라미터

이름 타입 필수 여부 설명
device_language_code str 선택 IETF BCP-47 language code (default: 'en')
POST /v1/update-user-default-meeting-setting

Update the user's default meeting settings.

파라미터

이름 타입 필수 여부 설명
original_languages list[str] 선택 STT input languages (IETF BCP-47)
view_language str 선택 Document generation language (default: 'en')
translation_languages list[str] 선택 Translation target languages
contextual_keywords list[str] 선택 Keywords to help AI understand meeting context

Transcription

Access live transcription chunks, finalized utterances, and corrections.

POST /v1/get-live-transcription-chunks

Get real-time transcription chunks for a meeting.

파라미터

이름 타입 필수 여부 설명
meeting_id str 필수 Meeting ID
last_updated_at str 필수 Pagination cursor (RFC 3339). Use '1970-01-01T00:00:00Z' for first page
message_id str 선택 Filter by message ID
limit int 선택 Max results (default: 100)
POST /v1/get-transcript-utterances

Get finalized transcript utterances with confidence scores.

파라미터

이름 타입 필수 여부 설명
meeting_id str 필수 Meeting ID
last_updated_at str 필수 Pagination cursor (RFC 3339). Use '1970-01-01T00:00:00Z' for first page
message_id str 선택 Filter by message ID
limit int 선택 Max results (default: 100)
POST /v1/update-transcript-utterance

Correct a transcribed utterance's text.

파라미터

이름 타입 필수 여부 설명
id str 필수 Utterance document ID
meeting_id str 필수 Meeting ID
transcript str 필수 Corrected transcript text

Notion

Upload meeting summaries to Notion.

POST /v1/upload-meeting-to-notion

Upload a meeting summary to a Notion workspace.

파라미터

이름 타입 필수 여부 설명
user_id str 필수 User ID (for retrieving Notion access token)
meeting_id str 필수 Meeting ID to upload

People

List contacts and people.

POST /v1/get-my-people

List the authenticated user's contacts.

파라미터

이름 타입 필수 여부 설명
cursor str 선택 Pagination cursor (name:email format)
limit int 선택 Results per page (default: 20)

오류 처리

API는 표준 HTTP 상태 코드와 JSON 오류 본문을 반환합니다:

상태 설명
401 API 키가 없거나 유효하지 않음
400 잘못된 요청 본문 (유효성 검사 오류)
404 리소스를 찾을 수 없음 (잘못된 미팅/메시지 ID)
500 내부 서버 오류
{
  "success": false,
  "error": "Meeting not found",
  "code": "NOT_FOUND"
}

Zapier 연동

개요

Connect BizCrush with your favorite tools through our Zapier integration. Automatically capture meeting summaries, generate AI documents, and push insights to Slack, Notion, Google Docs, and more.

Base URL https://bizcru.sh

트리거

4 polling triggers that detect new meetings, summaries, contacts, and follow-up emails.

액션

2 actions to retrieve meeting details and generate AI documents with custom prompts.

인증

Zapier는 OAuth 2.0 (Authorization Code flow)을 사용합니다. 토큰 수명 주기는 Zapier가 자동으로 관리합니다.

OAuth 2.0 플로우

단계 설명 엔드포인트
1 Authorization — User is redirected to BizCrush to grant access GET /oauth/zapier/authorize
2 Token Exchange — Authorization code is exchanged for access and refresh tokens POST /api/oauth/zapier/token
3 API Requests — Access token is sent as a Bearer token Authorization: Bearer <access_token>

연결 테스트

GET /api/zapier/me 인증: Bearer Token
curl https://bizcru.sh/api/zapier/me \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

응답 예시

{
  "user_id": "abc123",
  "email": "user@example.com",
  "display_name": "John Doe"
}

트리거

폴링 기반 트리거입니다. Zapier가 주기적으로 호출하여 새 데이터를 감지합니다. 모든 트리거는 날짜순(최신순)으로 정렬된 배열을 반환하며, 최대 50개입니다.

GET /api/zapier/triggers/meeting-ended 인증: Bearer Token

Meeting Ended

Fires when a meeting you participated in has ended. Returns up to 50 recent ended meetings.

응답 필드

필드 타입 설명
id string Meeting ID (deduplication key)
title string Meeting title
start_at ISO 8601 Meeting start time
end_at ISO 8601 Meeting end time
language string Meeting language (e.g., "ko", "en")
host_user_id string Host user ID
participant_count number Number of participants
tags string[] Meeting tags

응답 예시

[
  {
    "id": "01KMHVN8JX62M7HPS2H4GNXVR8",
    "title": "Weekly Standup",
    "start_at": "2025-01-15T09:00:00.000Z",
    "end_at": "2025-01-15T10:30:00.000Z",
    "language": "en",
    "host_user_id": "abc123",
    "participant_count": 3,
    "tags": ["standup", "weekly"]
  }
]
GET /api/zapier/triggers/summary-ready 인증: Bearer Token

Summary Ready

Fires when an AI-generated summary is ready for one of your meetings.

응답 필드

필드 타입 설명
id string Summary message ID (deduplication key)
meeting_id string Meeting ID
meeting_title string Meeting title
ai_model string AI model used for generation
markdown_body string Summary content in Markdown
created_at ISO 8601 Summary creation time

응답 예시

[
  {
    "id": "summary_msg_id",
    "meeting_id": "01KMHVN8JX62M7HPS2H4GNXVR8",
    "meeting_title": "Weekly Standup",
    "ai_model": "gpt-4o",
    "markdown_body": "## Meeting Summary\n- Discussed project updates...",
    "created_at": "2025-01-15T10:35:00.000Z"
  }
]
GET /api/zapier/triggers/contact-discovered 인증: Bearer Token

Contact Discovered

Fires when a new contact (guest profile) is discovered from a meeting.

응답 필드

필드 타입 설명
id string Contact message ID (deduplication key)
meeting_id string Meeting ID
meeting_title string Meeting title
name string Contact name
email string Contact email
company_name string Company name
company_position string Job title / position
linkedin_id string LinkedIn profile ID
created_at ISO 8601 Discovery time

응답 예시

[
  {
    "id": "contact_msg_id",
    "meeting_id": "01KMHVN8JX62M7HPS2H4GNXVR8",
    "meeting_title": "Sales Call",
    "name": "John Doe",
    "email": "john@example.com",
    "company_name": "Acme Inc",
    "company_position": "CEO",
    "linkedin_id": "johndoe",
    "created_at": "2025-01-15T11:00:00.000Z"
  }
]
GET /api/zapier/triggers/followup-email-ready 인증: Bearer Token

Follow-up Email Ready

Fires when an AI-generated follow-up email is ready for a meeting.

응답 필드

필드 타입 설명
id string Email message ID (deduplication key)
meeting_id string Meeting ID
meeting_title string Meeting title
subject string Email subject line
body_html string Email body in HTML
created_at ISO 8601 Email generation time

응답 예시

[
  {
    "id": "email_msg_id",
    "meeting_id": "01KMHVN8JX62M7HPS2H4GNXVR8",
    "meeting_title": "Sales Call",
    "subject": "Follow up from our meeting",
    "body_html": "<p>Thank you for the meeting.</p>",
    "created_at": "2025-01-15T11:10:00.000Z"
  }
]

액션

Zapier 사용자가 Zap에서 실행할 수 있는 액션입니다.

GET /api/zapier/meetings/{id} 인증: Bearer Token

Get Meeting Details

Retrieve detailed information about a specific meeting, including its latest AI summary.

경로 파라미터

파라미터 필수 여부 설명
id 필수 Meeting ID

응답 예시

{
  "id": "01KMHVN8JX62M7HPS2H4GNXVR8",
  "title": "Q1 Planning Meeting",
  "start_at": "2025-01-15T09:00:00.000Z",
  "end_at": "2025-01-15T10:30:00.000Z",
  "language": "en",
  "host_user_id": "abc123",
  "participant_count": 4,
  "tags": ["planning", "q1"],
  "latest_summary": {
    "ai_model": "gpt-4o",
    "markdown_body": "## Key Decisions\n- Approved Q1 budget...",
    "created_at": "2025-01-15T10:35:00.000Z"
  }
}
POST /api/zapier/meetings/{id}/generate-document 인증: Bearer Token

Generate AI Document

Generate an AI document from a meeting using a custom prompt. Supports asynchronous callback delivery for long-running generations.

경로 파라미터

파라미터 필수 여부 설명
id 필수 Meeting ID

요청 본문

필드 타입 필수 여부 기본값 설명
prompt str 필수 Custom prompt for document generation (e.g., "Summarize key decisions and action items")
model str 선택 gpt-4o AI model — gpt-4o (default) or claude
callback_url str 선택 URL to receive async results (used by Zapier automatically)

응답 예시

// Sync response (no callback)
{
  "success": true,
  "meeting_id": "01KMHVN8...",
  "document_text": "## Summary\n...",
  "message": "AI document generation requested."
}

비동기 콜백 응답

// Async: initial response (immediate)
{
  "success": true,
  "meeting_id": "01KMHVN8...",
  "message": "AI document generation started. Result will be delivered via callback."
}

// Async: callback POST to callback_url (after AI completes)
{
  "status": "success",
  "meeting_id": "01KMHVN8...",
  "document_text": "# Detailed AI Document\n\n## Key Decisions\n- ...",
  "created_at": "2025-01-15T10:40:00.000Z"
}