Skip to main content
The Bota API is a RESTful API for managing conversation capture devices, audio uploads, transcription, and summarization. This page covers the fundamentals you need to integrate with the API.

Base URL

All API requests are made to:
https://api.bota.dev/v1
For development and testing, use the sandbox environment:
https://api.sandbox.bota.dev/v1
Test and live environments are completely isolated. Data created in sandbox does not exist in production.

Authentication

Authenticate requests using Bearer tokens in the Authorization header:
curl https://api.bota.dev/v1/end-users \
  -H "Authorization: Bearer sk_live_abc123..."

API Key Types

TypePrefixLifespanUse Case
Secret Keysk_live_, sk_test_Long-livedServer-side API access
Restricted Keyrk_live_, rk_test_Long-livedLimited-scope server access
Device Tokendtok_Hours/daysDevice authentication
Upload Tokenup_MinutesSingle file upload
Never expose secret keys (sk_*) in client-side code, mobile apps, or public repositories.
See Authentication for detailed guidance on key management and security.

Request Format

Headers

HeaderRequiredDescription
AuthorizationYesBearer token: Bearer sk_live_...
Content-TypeFor POST/PUTapplication/json
Idempotency-KeyRecommendedUnique key for safe retries
Bota-VersionOptionalAPI version date (e.g., 2025-01-15)

Request Body

Send JSON in the request body for POST and PUT requests:
curl -X POST https://api.bota.dev/v1/end-users \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "external_id": "user_123",
    "name": "John Doe"
  }'

Response Format

All responses return JSON with consistent structure.

Success Response

{
  "id": "eu_abc123",
  "external_id": "user_123",
  "name": "John Doe",
  "created_at": "2025-01-15T10:00:00Z"
}

List Response

List endpoints return paginated results:
{
  "data": [
    { "id": "eu_abc123", "name": "John Doe" },
    { "id": "eu_def456", "name": "Jane Smith" }
  ],
  "has_more": true,
  "next_cursor": "eyJpZCI6ImV1X2RlZjQ1NiJ9"
}

Error Response

{
  "error": {
    "code": "invalid_request",
    "message": "The 'external_id' field is required",
    "param": "external_id",
    "request_id": "req_abc123"
  }
}

HTTP Status Codes

CodeDescription
200Success
201Created
204No content (successful deletion)
400Bad request — invalid parameters
401Unauthorized — invalid or missing API key
403Forbidden — insufficient permissions
404Not found
409Conflict — resource already exists
422Unprocessable — validation error
429Rate limited
500Server error
See Errors for detailed error codes and handling strategies.

Pagination

List endpoints support cursor-based pagination:
# First page
curl "https://api.bota.dev/v1/recordings?limit=20" \
  -H "Authorization: Bearer sk_live_..."

# Next page
curl "https://api.bota.dev/v1/recordings?limit=20&cursor=eyJpZCI6InJlY18xMjMifQ" \
  -H "Authorization: Bearer sk_live_..."
ParameterTypeDescription
limitintegerItems per page (default: 20, max: 100)
cursorstringCursor from previous response
See Pagination for details.

Rate Limits

The API enforces rate limits to ensure fair usage:
LimitValue
Requests per second100
Requests per minute1,000
Concurrent uploads10
Rate limit headers are included in every response:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1705320000
See Rate Limits for handling 429 responses.

Idempotency

For safe retries, include an Idempotency-Key header on POST requests:
curl -X POST https://api.bota.dev/v1/recordings \
  -H "Authorization: Bearer sk_live_..." \
  -H "Idempotency-Key: rec_create_user123_1705320000" \
  -H "Content-Type: application/json" \
  -d '{"device_id": "dev_xyz789"}'
Replaying a request with the same key returns the original response without creating duplicates. See Idempotency for best practices.

Versioning

The API uses date-based versioning. Specify a version to pin your integration:
curl https://api.bota.dev/v1/end-users \
  -H "Authorization: Bearer sk_live_..." \
  -H "Bota-Version: 2025-01-15"
Without a version header, requests use the latest stable version. See Versioning for migration guidance.

Environments

EnvironmentBase URLAPI KeysPurpose
Productionapi.bota.devsk_live_*Live data, billed usage
Sandboxapi.sandbox.bota.devsk_test_*Testing, simulated processing
Sandbox features:
  • Transcriptions complete instantly with simulated results
  • No billing or usage charges
  • Data may be cleared periodically
See Test Mode for sandbox details.

Core Resources

The API is organized around these resources:

SDKs & Tools

Official SDKs (coming soon):
  • Node.js / TypeScript
  • Python
  • Go

Need Help?