Skip to main content
Bota provides test and live API keys to help you develop and test your integration safely. Both key types use the same API endpoint.

API Keys

Each project has separate API keys for test and live modes:
# Test mode - development and testing
curl https://api.bota.dev/v1/end-users \
  -H "Authorization: Bearer sk_test_abc123..."

# Live mode - production
curl https://api.bota.dev/v1/end-users \
  -H "Authorization: Bearer sk_live_xyz789..."

Key Types by Mode

Key TypeTest ModeLive Mode
Secret keysk_test_*sk_live_*
Device tokendtok_*dtok_*
Upload tokenup_*up_*
Test and live modes are completely isolated. EndUsers, devices, and recordings created with test keys do not exist in live mode and vice versa.

Test Mode Behavior

What’s the Same

  • Same API endpoint (https://api.bota.dev/v1)
  • All API endpoints work identically
  • Request/response formats are identical
  • Webhooks are delivered normally
  • Error codes and messages match production

What’s Different

FeatureTest ModeLive Mode
BillingNot chargedUsage is metered
TranscriptionReal ASR processingReal ASR processing
Data persistencePermanentPermanent
Rate limitsSame as live100 req/sec
WebhooksDelivered normallyDelivered normally
Test mode uses real ASR processing, so transcription quality and timing match production. This ensures your integration behaves identically when you go live.

Multiple Projects for Environments

For more robust environment separation, create multiple projects within your organization:
ProjectPurposeAPI Keys
ProductionLive customer datask_live_*
StagingPre-release testingsk_live_* or sk_test_*
DevelopmentLocal developmentsk_test_*
This approach provides:
  • Complete data isolation between environments
  • Separate webhook configurations per environment
  • Independent rate limits and quotas
  • Clear audit trails per environment

Testing Webhooks

Webhooks in test mode work exactly like production. Events are delivered to your configured endpoints with valid signatures.

Testing Locally

Use a tunneling service like ngrok to receive webhooks during local development:
# Start ngrok tunnel
ngrok http 3000

# Use the ngrok URL when creating webhook endpoints
curl -X POST https://api.bota.dev/v1/webhooks \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://abc123.ngrok.io/webhooks/bota",
    "events": ["transcription.completed"]
  }'

Trigger Test Events

Create resources with test keys to trigger webhook events:
# Create a recording (triggers recording.created)
curl -X POST https://api.bota.dev/v1/recordings \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "end_user_id": "eu_abc123",
    "device_id": "dev_xyz789"
  }'

# Start transcription (triggers transcription.completed when done)
curl -X POST https://api.bota.dev/v1/transcriptions \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "recording_id": "rec_abc123"
  }'

Going Live Checklist

Before switching from test mode to production:
1

Update API keys

Replace sk_test_* keys with sk_live_* keys in your production environment
2

Verify webhook endpoints

Ensure your production webhook URLs are configured and accessible
3

Test with real devices

Verify BLE pairing and upload flows work with actual hardware
4

Monitor initial requests

Watch for errors in your first production API calls

Environment Variables

We recommend using environment variables to manage your API configuration:
BOTA_API_KEY=sk_test_abc123...
BOTA_WEBHOOK_SECRET=whsec_test_xyz789...
// Your code uses the same logic regardless of environment
const bota = new BotaClient({
  apiKey: process.env.BOTA_API_KEY,
});

Cleaning Up Test Data

To clean up test data, delete the resources directly:
# Delete a test end user (also deletes associated recordings, transcriptions, summaries)
curl -X DELETE https://api.bota.dev/v1/end-users/eu_abc123 \
  -H "Authorization: Bearer sk_test_..."
Deleting an EndUser also deletes all associated recordings, transcriptions, and summaries.