Solatis API Documentation
API Version 2.1.0
Current stable API version with enhanced security features and improved rate limiting.
SOC 2 Type II Certified
Solatis APIs meet rigorous security standards for enterprise-grade applications.
Build AI-Powered Apps with Solatis APIs
Access 50+ production-ready AI endpoints for document intelligence, meeting analysis, content generation, and workflow automation. Enterprise-grade security, rate limiting, and 99.9% uptime SLA.
Key Features
🔒 Enterprise Security
SOC 2 Type II certified, end-to-end encryption, GDPR compliant, and role-based access control
⚡ 99.9% Uptime SLA
Production-grade infrastructure with automatic failover and 24/7 monitoring
📊 Smart Rate Limiting
Intelligent rate limiting that scales with your usage patterns and business needs
Quick Start
Get started with the Solatis API in minutes.
1. Get Your API Key
Navigate to your Solatis Dashboard and create a new API key:
# Your API key will look like this:
sol_live_abc123xyz456...Keep Your API Key Secure
Never commit API keys to version control or expose them in client-side code. Use environment variables.
2. Make Your First Request
# Example: Transcribe an audio file
curl -X POST https://api.solatis.team/v2/transcribe \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"audio_url": "https://example.com/meeting.mp3",
"language": "en",
"speaker_labels": true
}'3. Handle the Response
{
"id": "trans_abc123",
"status": "processing",
"estimated_completion": "2024-01-15T10:30:00Z",
"webhook_url": "https://yourapp.com/webhook"
}4. Get Results via Webhook or Polling
Option A: Webhook (Recommended)
// Your webhook endpoint receives:
{
"id": "trans_abc123",
"status": "completed",
"transcript": "Full transcript text...",
"speakers": [
{"speaker": "Speaker 1", "segments": [...]},
{"speaker": "Speaker 2", "segments": [...]}
],
"duration_seconds": 1800,
"confidence": 0.95
}Option B: Polling
curl https://api.solatis.team/v2/transcribe/trans_abc123 \
-H "Authorization: Bearer YOUR_API_KEY"Core API Endpoints
Document Intelligence
Analyze Documents
Extract insights, summaries, and structured data from documents.
POST /v2/documents/analyzeRequest:
{
"document_url": "https://example.com/contract.pdf",
"analysis_type": "contract_review",
"extract_fields": ["parties", "dates", "obligations", "risks"]
}Response:
{
"id": "doc_xyz789",
"summary": "This is a service agreement between...",
"extracted_fields": {
"parties": ["Acme Corp", "Client LLC"],
"start_date": "2024-01-01",
"end_date": "2025-01-01",
"obligations": [...],
"risks": [...]
},
"confidence": 0.92
}Chat with Documents
Ask questions about uploaded documents.
POST /v2/documents/chatRequest:
{
"document_id": "doc_xyz789",
"question": "What are the termination clauses?",
"context_window": 5
}Meeting Analysis
Transcribe Audio/Video
Convert meeting recordings to text with speaker diarization.
POST /v2/transcribeSupported formats: MP3, WAV, M4A, MP4, WEBM Max file size: 2GB Languages: English, Spanish, French, German, Portuguese
Extract Action Items
Automatically identify tasks and commitments from transcripts.
POST /v2/meetings/action-itemsRequest:
{
"transcript_id": "trans_abc123",
"assign_to_speakers": true,
"extract_deadlines": true
}Response:
{
"action_items": [
{
"description": "Send proposal to client",
"assigned_to": "Speaker 1",
"due_date": "2024-01-20",
"confidence": 0.89
}
]
}Strategic Conversation Analysis
Identify key moments, decisions, and objections.
POST /v2/meetings/strategic-analysisContent Generation
Generate Content
Create blog posts, emails, reports, and more.
POST /v2/generate/contentRequest:
{
"type": "blog_post",
"topic": "AI in Healthcare",
"tone": "professional",
"length": "medium",
"keywords": ["AI", "healthcare", "diagnostics"]
}Brainstorming Sessions
Interactive AI brainstorming for ideas and problem-solving.
POST /v2/generate/brainstormWorkflow Automation
Create Tasks
Programmatically create and manage tasks.
POST /v2/tasksSync with Project Tools
Push tasks to Jira, Asana, or other tools.
POST /v2/integrations/syncAuthentication
All API requests require authentication via Bearer token:
Authorization: Bearer YOUR_API_KEYAPI Key Types
| Type | Prefix | Use Case | Rate Limit |
|---|---|---|---|
| Test | sol_test_ | Development & testing | 100 requests/hour |
| Live | sol_live_ | Production applications | Based on plan |
| Restricted | sol_restricted_ | Specific scopes only | Custom |
Scopes
Control what your API key can access:
read:transcripts- Read transcription datawrite:transcripts- Create transcriptionsread:documents- Read document analyseswrite:documents- Upload and analyze documentsread:tasks- View taskswrite:tasks- Create and modify tasksadmin:all- Full account access
Rate Limiting
Rate limits vary by plan:
| Plan | Requests/Minute | Requests/Day | Concurrent |
|---|---|---|---|
| Individual | 60 | 10,000 | 5 |
| Team | 300 | 100,000 | 25 |
| Enterprise | Custom | Custom | Custom |
Rate Limit Headers
Every response includes rate limit information:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1642348800Handling Rate Limits
async function makeRequestWithRetry(url, options, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
const response = await fetch(url, options);
if (response.status === 429) {
const resetTime = response.headers.get('X-RateLimit-Reset');
const waitTime = (resetTime * 1000) - Date.now();
await new Promise(resolve => setTimeout(resolve, waitTime));
continue;
}
return response;
}
throw new Error('Max retries exceeded');
}Webhooks
Set up webhooks to receive real-time notifications.
Configure Webhook Endpoints
POST /v2/webhooksRequest:
{
"url": "https://yourapp.com/webhook",
"events": ["transcription.completed", "document.analyzed", "task.created"],
"secret": "your_webhook_secret"
}Verify Webhook Signatures
const crypto = require('crypto');
function verifyWebhookSignature(payload, signature, secret) {
const hmac = crypto.createHmac('sha256', secret);
const digest = hmac.update(payload).digest('hex');
return signature === digest;
}
// Express middleware example
app.post('/webhook', (req, res) => {
const signature = req.headers['x-solatis-signature'];
const isValid = verifyWebhookSignature(
JSON.stringify(req.body),
signature,
process.env.WEBHOOK_SECRET
);
if (!isValid) {
return res.status(401).send('Invalid signature');
}
// Process webhook event
res.status(200).send('OK');
});Error Handling
HTTP Status Codes
| Code | Meaning | Action |
|---|---|---|
| 200 | Success | Process response |
| 201 | Created | Resource created successfully |
| 400 | Bad Request | Check request parameters |
| 401 | Unauthorized | Verify API key |
| 403 | Forbidden | Check API key scopes |
| 404 | Not Found | Resource doesn't exist |
| 429 | Rate Limited | Wait and retry |
| 500 | Server Error | Contact support |
Error Response Format
{
"error": {
"code": "invalid_request",
"message": "Missing required field: audio_url",
"details": {
"field": "audio_url",
"type": "required"
},
"request_id": "req_abc123"
}
}Common Error Codes
| Code | Description | Solution |
|---|---|---|
invalid_api_key | API key is invalid or expired | Check your API key |
insufficient_quota | Usage quota exceeded | Upgrade plan or wait for reset |
invalid_request | Request parameters are invalid | Review API documentation |
resource_not_found | Requested resource doesn't exist | Verify resource ID |
rate_limit_exceeded | Too many requests | Implement exponential backoff |
SDKs & Libraries
Official SDKs
JavaScript/TypeScript
npm install @solatis/sdkimport { Solatis } from '@solatis/sdk';
const client = new Solatis({
apiKey: process.env.SOLATIS_API_KEY
});
// Transcribe audio
const transcript = await client.transcribe({
audioUrl: 'https://example.com/meeting.mp3',
language: 'en',
speakerLabels: true
});Python
pip install solatisfrom solatis import Solatis
client = Solatis(api_key='YOUR_API_KEY')
# Analyze document
analysis = client.documents.analyze(
document_url='https://example.com/contract.pdf',
analysis_type='contract_review'
)Ruby
gem install solatisGo
go get github.com/solatis/solatis-goCommunity SDKs
- PHP: solatis/solatis-php
- Java: solatis/solatis-java
- .NET: solatis/solatis-dotnet
Best Practices
Security
- Never expose API keys in client-side code
// ❌ Bad - exposed in frontend
const apiKey = 'sol_live_abc123';
// ✅ Good - use environment variables
const apiKey = process.env.SOLATIS_API_KEY;- Use restricted keys for specific scopes
# Create a key with limited permissions
POST /v2/api-keys
{
"name": "Frontend Readonly",
"scopes": ["read:transcripts", "read:documents"]
}- Rotate keys regularly
# Rotate every 90 days for production keysPerformance
- Use webhooks instead of polling
// ✅ Good - webhook receives notification
app.post('/webhook', handleTranscriptionComplete);
// ❌ Bad - polling wastes resources
setInterval(() => checkTranscriptionStatus(), 5000);- Batch requests when possible
// ✅ Good - batch upload
await client.documents.analyzeBatch(documentUrls);
// ❌ Bad - individual requests
for (const url of documentUrls) {
await client.documents.analyze(url);
}- Implement caching
const cache = new Map();
async function getTranscript(id) {
if (cache.has(id)) {
return cache.get(id);
}
const transcript = await client.transcripts.get(id);
cache.set(id, transcript);
return transcript;
}Error Handling
- Implement exponential backoff
async function retryWithBackoff(fn, maxRetries = 5) {
for (let i = 0; i < maxRetries; i++) {
try {
return await fn();
} catch (error) {
if (i === maxRetries - 1) throw error;
const delay = Math.pow(2, i) * 1000;
await new Promise(resolve => setTimeout(resolve, delay));
}
}
}- Log errors with request IDs
try {
await client.transcribe(audioUrl);
} catch (error) {
console.error('Transcription failed', {
requestId: error.requestId,
message: error.message
});
}Support & Resources
Documentation
Developer Community
Support
- Email: developers@solatis.team
- Response Time:
- Enterprise: 4 hours
- Team: 24 hours
- Individual: 48 hours