| name | twinmind-upgrade-migration |
| description | Upgrade between TwinMind plan tiers and migrate configurations.
Use when upgrading from Free to Pro, Pro to Enterprise,
or migrating between TwinMind environments.
Trigger with phrases like "upgrade twinmind", "twinmind pro",
"twinmind enterprise", "migrate twinmind", "twinmind tier change".
|
| allowed-tools | Read, Write, Edit, Bash(curl:*) |
| version | 1.0.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
TwinMind Upgrade & Migration
Overview
Guide for upgrading TwinMind tiers and migrating configurations between environments.
Prerequisites
- Active TwinMind account
- Admin access for billing changes
- Backup of current configurations
Plan Comparison
| Feature | Free | Pro ($10/mo) | Enterprise (Custom) |
|---|
| Transcription | Unlimited | Unlimited | Unlimited |
| Languages | 140+ | 140+ (Premium Ear-3) | 140+ (Premium) |
| AI Models | Basic | GPT-4, Claude, Gemini | Custom + Fine-tuned |
| Context Tokens | 500K | 2M | Unlimited |
| API Access | No | Yes | Yes + Priority |
| Rate Limits | 30/min | 60/min | 300/min |
| Concurrent Jobs | 1 | 3 | 10+ |
| Support | Community | 24-hour | Dedicated |
| SSO/SAML | No | No | Yes |
| On-Premise | No | No | Yes |
| Custom Models | No | No | Yes |
| SLA | None | 99.5% | 99.9% |
Instructions
Step 1: Audit Current Usage
import { getTwinMindClient } from '../src/twinmind/client';
async function auditUsage() {
const client = getTwinMindClient();
const account = await client.get('/account');
console.log('Current Plan:', account.data.plan);
console.log('Plan Started:', account.data.plan_started_at);
const usage = await client.get('/usage', {
params: {
period: 'last_30_days',
},
});
console.log('\n=== Usage Summary (Last 30 Days) ===');
console.log(`Transcription Hours: ${usage.data.transcription_hours}`);
console.log(`API Requests: ${usage.data.api_requests}`);
console.log(`AI Tokens Used: ${usage.data.ai_tokens_used}`);
.();
limits = client.();
.();
.();
.();
.();
.();
(usage.. > && account.. === ) {
.();
}
(usage.. > ) {
.();
}
(usage.. > ) {
.();
}
}
();
Step 2: Export Current Configuration
import * as fs from 'fs';
interface TwinMindConfig {
version: string;
exportedAt: string;
settings: {
language: string;
diarization: boolean;
model: string;
privacy: {
redactPII: boolean;
retentionDays: number;
};
};
integrations: Array<{
type: string;
enabled: boolean;
config: Record<string, any>;
}>;
webhooks: Array<{
url: string;
events: string[];
active: boolean;
}>;
}
async function exportConfiguration(): Promise<TwinMindConfig> {
const client = getTwinMindClient();
const [settings, integrations, webhooks] = await .([
client.(),
client.(),
client.(),
]);
: = {
: ,
: ().(),
: {
: settings..,
: settings..,
: settings..,
: {
: settings..,
: settings..,
},
},
: integrations..( ({
: i.,
: i.,
: i.,
})),
: webhooks..( ({
: w.,
: w.,
: w.,
})),
};
filename = ;
fs.(filename, .(config, , ));
.();
config;
}
();
Step 3: Upgrade Plan
Via Dashboard
- Log in to https://twinmind.com/settings/billing
- Click "Upgrade Plan"
- Select desired tier (Pro or Enterprise)
- Enter payment information
- Confirm upgrade
Via API (Enterprise Only)
async function requestEnterpriseUpgrade() {
const client = getTwinMindClient();
const response = await client.post('/account/upgrade-request', {
target_plan: 'enterprise',
contact_email: 'admin@company.com',
company_name: 'Acme Inc',
estimated_usage: {
transcription_hours_monthly: 1000,
api_requests_monthly: 100000,
team_members: 50,
},
requirements: [
'SSO/SAML integration',
'On-premise deployment',
'Custom model training',
'99.9% SLA',
],
});
console.log('Upgrade request submitted:', response.data.request_id);
console.log('Sales team will contact you within 24 hours');
}
Step 4: Update API Keys
export TWINMIND_API_KEY="tm_sk_prod_new_key_here"
aws secretsmanager update-secret \
--secret-id twinmind-api-key \
--secret-string "$TWINMIND_API_KEY"
curl -H "Authorization: Bearer $TWINMIND_API_KEY" \
https://api.twinmind.com/v1/me
Step 5: Import Configuration to New Tier
import * as fs from 'fs';
async function importConfiguration(configFile: string) {
const client = getTwinMindClient();
const config = JSON.parse(fs.readFileSync(configFile, 'utf-8'));
console.log(`Importing configuration from: ${configFile}`);
console.log(`Exported at: ${config.exportedAt}`);
console.log('\nImporting settings...');
await client.patch('/settings', {
default_language: config.settings.language,
diarization_enabled: config.settings.diarization,
transcription_model: config.settings.model,
redact_pii: config.settings.privacy.redactPII,
retention_days: config.settings.privacy.retentionDays,
});
.();
.();
( integration config.) {
(integration.) {
client.(, integration);
.();
}
}
.();
( webhook config.) {
(webhook.) {
client.(, webhook);
.();
}
}
.();
}
configFile = process.[];
(configFile) {
(configFile);
} {
.();
}
Step 6: Verify Upgraded Features
async function verifyUpgrade() {
const client = getTwinMindClient();
const account = await client.get('/account');
const plan = account.data.plan;
console.log(`Current Plan: ${plan}`);
console.log('\nVerifying features...\n');
if (plan === 'pro' || plan === 'enterprise') {
try {
const health = await client.get('/health');
console.log('[PASS] API Access');
} catch {
console.log('[FAIL] API Access');
}
}
const limits = await client.get('/account/limits');
console.log(`[INFO] Rate Limit: ${limits.data.rate_limit_per_minute}/min`);
if (plan === 'pro' || plan === ) {
{
models = client.();
hasEar3 = models..( m. === );
.(hasEar3 ? : );
} {
.();
}
}
.();
(plan === ) {
sso = client.();
.(sso.. ? : );
.();
}
.();
}
();
Step 7: Update Application Configuration
const tierConfigs = {
free: {
rateLimit: 30,
concurrent: 1,
contextTokens: 500000,
model: 'ear-2',
},
pro: {
rateLimit: 60,
concurrent: 3,
contextTokens: 2000000,
model: 'ear-3',
},
enterprise: {
rateLimit: 300,
concurrent: 10,
contextTokens: Infinity,
model: 'ear-3-custom',
},
};
export function getConfigForTier(tier: 'free' | 'pro' | 'enterprise') {
return tierConfigs[tier];
}
export function updateQueueForTier(tier: 'free' | 'pro' | 'enterprise') {
const config = getConfigForTier(tier);
queue.concurrency = config.concurrent;
queue. = config.;
.(, config);
}
Migration Paths
Free to Pro
- Enable billing in dashboard
- Select Pro plan
- Generate API key
- Update environment variables
- Enable premium features
Pro to Enterprise
- Contact sales or submit upgrade request
- Complete enterprise onboarding
- Configure SSO/SAML if needed
- Set up dedicated support channel
- Review custom SLA terms
Environment Migration (Dev to Prod)
- Export dev configuration
- Create production API key
- Set up production secrets
- Import configuration
- Verify all features
Output
- Usage audit report
- Exported configuration backup
- Upgraded plan verification
- Updated application configuration
Error Handling
| Issue | Cause | Solution |
|---|
| Payment failed | Invalid card | Update payment method |
| Config import failed | Version mismatch | Manually update settings |
| Features not available | Plan not activated | Wait 5 mins, refresh |
| Rate limit unchanged | Cache stale | Clear cache, re-auth |
Resources
Next Steps
For CI/CD integration, see twinmind-ci-integration.