{"_id":"@callpaymin/sdk","name":"@callpaymin/sdk","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@callpaymin/sdk","version":"1.0.0","description":"Official JavaScript/TypeScript SDK for CallPayMin API - per-minute billing video calls, chat, and AI summaries","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup src/index.ts --format cjs,esm --dts --clean","dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src --ext .ts","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"keywords":["callpaymin","video-call","webrtc","billing","per-minute","ai-summary","chat","stripe","payments","sdk","api"],"author":{"name":"CallPayMin","email":"support@callpaymin.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/callpaymin/sdk.git"},"homepage":"https://docs.callpaymin.com","bugs":{"url":"https://github.com/callpaymin/sdk/issues"},"engines":{"node":">=16"},"devDependencies":{"@types/node":"^20.0.0","tsup":"^8.0.0","typescript":"^5.3.0","eslint":"^8.56.0","@typescript-eslint/eslint-plugin":"^6.19.0","@typescript-eslint/parser":"^6.19.0"},"peerDependencies":{"react-native-webrtc":">=111.0.0"},"peerDependenciesMeta":{"react-native-webrtc":{"optional":true}},"gitHead":"22267c51bbb8104c5686f1de0c3ff5b70b991563","_id":"@callpaymin/sdk@1.0.0","_nodeVersion":"20.19.5","_npmVersion":"11.6.4","dist":{"integrity":"sha512-RKFYkjda4/C3lMVCeI3RhCC6V672alF26SAjMPmtqUICPr6MLsMhWAXB9s0W4tRFd2//XysE6p0/VT1QCv3X3w==","shasum":"4fd9126619c84fada5c065c5685080b7d704e9ec","tarball":"https://registry.npmjs.org/@callpaymin/sdk/-/sdk-1.0.0.tgz","fileCount":6,"unpackedSize":132635,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGJirWKs0dcX9DbC/Mzq9NVdv4NoTdg+0VkHrDK12aYnAiEA4OZsj3kYX3zRtJVDGh7ZUEwr6wZK6Dx8So2DR+6m+CA="}]},"_npmUser":{"name":"ravkumarc","email":"ravkumarc@gmail.com"},"directories":{},"maintainers":[{"name":"ravkumarc","email":"ravkumarc@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk_1.0.0_1768794865134_0.16373732492972892"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-19T03:54:25.027Z","1.0.0":"2026-01-19T03:54:25.270Z","modified":"2026-01-19T03:54:25.534Z"},"maintainers":[{"name":"ravkumarc","email":"ravkumarc@gmail.com"}],"description":"Official JavaScript/TypeScript SDK for CallPayMin API - per-minute billing video calls, chat, and AI summaries","homepage":"https://docs.callpaymin.com","keywords":["callpaymin","video-call","webrtc","billing","per-minute","ai-summary","chat","stripe","payments","sdk","api"],"repository":{"type":"git","url":"git+https://github.com/callpaymin/sdk.git"},"author":{"name":"CallPayMin","email":"support@callpaymin.com"},"bugs":{"url":"https://github.com/callpaymin/sdk/issues"},"license":"MIT","readme":"# CallPayMin SDK\n\nOfficial JavaScript/TypeScript SDK for the CallPayMin API. Build per-minute billing video calls, chat messaging, and AI summaries into your applications.\n\n## Installation\n\n```bash\nnpm install @callpaymin/sdk\n# or\nyarn add @callpaymin/sdk\n# or\npnpm add @callpaymin/sdk\n```\n\n## Quick Start\n\n```typescript\nimport { CallPayMin } from '@callpaymin/sdk';\n\nconst client = new CallPayMin({\n  apiKey: 'cpm_live_your_api_key',\n});\n\n// Create a user\nconst user = await client.users.create({\n  externalId: 'user_123',\n  displayName: 'John Doe',\n  email: 'john@example.com',\n});\n\n// Create an expert\nconst expert = await client.experts.create({\n  externalId: 'expert_456',\n  displayName: 'Dr. Smith',\n  ratePerMinute: 5,\n});\n\n// Start a call with per-minute billing\nconst call = await client.calls.create({\n  participants: [\n    { externalId: 'user_123', displayName: 'John', role: 'client' },\n    { externalId: 'expert_456', displayName: 'Dr. Smith', role: 'expert' },\n  ],\n  billing: {\n    payerId: 'user_123',\n    ratePerMinute: 5,\n  },\n});\n```\n\n## Features\n\n- **Video/Audio Calls** - WebRTC-powered calls with TURN server support\n- **Per-Minute Billing** - Automatic billing based on call duration\n- **Chat Messaging** - Real-time chat with per-message billing\n- **AI Summaries** - Generate call/chat summaries using AI\n- **Payment Methods** - Stripe integration for card payments\n- **Webhooks** - Real-time event notifications\n\n## Payment Modes\n\n### Self-Managed Mode\n\nYou handle payments. We track virtual balances.\n\n```typescript\n// Add funds after your own payment processing\nawait client.users.addFunds('user_123', {\n  amount: 50,\n  description: 'Deposit',\n});\n```\n\n### Managed Mode\n\nCallPayMin handles Stripe payments for you.\n\n```typescript\n// Create setup intent for card collection\nconst { clientSecret } = await client.users.createSetupIntent('user_123');\n\n// Use clientSecret with Stripe.js on frontend\n// After user adds card, save it:\nawait client.users.savePaymentMethod('user_123', {\n  paymentMethodId: 'pm_xxx',\n  setAsDefault: true,\n});\n\n// Charge user's card\nawait client.users.charge('user_123', {\n  amount: 25,\n  description: 'Consultation fee',\n});\n```\n\n## WebRTC Video Calls\n\n### Browser\n\n```typescript\nimport { CallPayMin, CallPayMinWebRTC } from '@callpaymin/sdk';\n\nconst client = new CallPayMin({ apiKey: 'cpm_live_xxx' });\n\nconst callClient = new CallPayMinWebRTC({\n  client,\n  onLocalStream: (stream) => {\n    localVideo.srcObject = stream;\n  },\n  onRemoteStream: (stream) => {\n    remoteVideo.srcObject = stream;\n  },\n  onStateChange: (state) => {\n    console.log('Call state:', state);\n  },\n  onCallEnded: (call) => {\n    console.log(`Duration: ${call.duration}s, Cost: $${call.billing.totalCost}`);\n  },\n});\n\n// Start call\nconst call = await callClient.startCall({\n  participants: [\n    { externalId: 'user_123', displayName: 'John', role: 'client' },\n    { externalId: 'expert_456', displayName: 'Dr. Smith', role: 'expert' },\n  ],\n  billing: {\n    payerId: 'user_123',\n    ratePerMinute: 5,\n  },\n});\n\n// Controls\ncallClient.toggleAudio(false); // Mute\ncallClient.toggleVideo(false); // Camera off\n\n// End call\nawait callClient.endCall();\n```\n\n### React Native\n\n```bash\nnpm install @callpaymin/sdk react-native-webrtc\n```\n\nSee [examples/react-native](./examples/react-native) for full implementation.\n\n## Chat Messaging\n\n```typescript\n// Create chat session\nconst chat = await client.chats.create({\n  participants: [\n    { externalId: 'user_123', displayName: 'John', role: 'client' },\n    { externalId: 'expert_456', displayName: 'Dr. Smith', role: 'expert' },\n  ],\n  billing: {\n    payerId: 'user_123',\n    ratePerMinute: 2,\n    freeTier: { messages: 10 },\n  },\n});\n\n// Send message\nconst message = await client.chats.sendMessage(chat.id, {\n  senderExternalId: 'user_123',\n  content: 'Hello, I have a question...',\n});\n\n// Get messages\nconst messages = await client.chats.getMessages(chat.id);\n\n// End chat\nawait client.chats.end(chat.id);\n```\n\n## AI Summaries\n\n```typescript\n// Generate summary for a call\nconst summary = await client.summaries.generateForCall('call_abc123', {\n  type: 'detailed',\n  includeActionItems: true,\n  includeKeyPoints: true,\n});\n\nconsole.log(summary.content);\nconsole.log(summary.actionItems);\nconsole.log(summary.keyPoints);\n\n// Generate summary for a chat\nconst chatSummary = await client.summaries.generateForChat('chat_xyz789');\n```\n\n## Users & Experts\n\n### Users (Clients)\n\n```typescript\n// Create user\nconst user = await client.users.create({\n  externalId: 'user_123',\n  displayName: 'John Doe',\n  email: 'john@example.com',\n});\n\n// Get balance\nconst { balance } = await client.users.getBalance('user_123');\n\n// Get transactions\nconst transactions = await client.users.getTransactions('user_123');\n\n// Payment methods (managed mode)\nconst methods = await client.users.getPaymentMethods('user_123');\n```\n\n### Experts\n\n```typescript\n// Create expert\nconst expert = await client.experts.create({\n  externalId: 'expert_456',\n  displayName: 'Dr. Smith',\n  email: 'smith@example.com',\n  specialties: ['cardiology'],\n  ratePerMinute: 5,\n});\n\n// Update availability\nawait client.experts.setStatus('expert_456', 'available');\n\n// Get earnings\nconst earnings = await client.experts.getEarnings('expert_456');\n// { balance: 150, pendingPayout: 50, totalEarned: 1000 }\n\n// Request payout\nawait client.experts.requestPayout('expert_456');\n```\n\n## Organization & API Keys\n\n```typescript\n// Get usage\nconst usage = await client.organization.getUsage();\n// { callMinutes: { used: 150, limit: 1000 }, ... }\n\n// Create API key\nconst { apiKey, key } = await client.organization.createApiKey({\n  name: 'Production Server',\n  scopes: ['calls:write', 'users:read'],\n});\n// Save `key` securely - it won't be shown again!\n\n// Configure webhooks\nawait client.organization.configureWebhooks({\n  url: 'https://yourapp.com/webhooks/callpaymin',\n  events: ['call.started', 'call.ended', 'summary.completed'],\n});\n```\n\n## Webhooks\n\nConfigure webhooks to receive real-time notifications:\n\n```typescript\n// Events: call.started, call.ended, summary.completed, billing.threshold_reached\n```\n\nVerify webhook signatures:\n\n```typescript\nimport crypto from 'crypto';\n\nfunction verifySignature(payload, signature, secret) {\n  const [timestamp, hash] = [\n    signature.match(/t=(\\d+)/)?.[1],\n    signature.match(/v1=(\\w+)/)?.[1],\n  ];\n\n  const signedPayload = `${timestamp}.${JSON.stringify(payload)}`;\n  const expected = crypto.createHmac('sha256', secret).update(signedPayload).digest('hex');\n\n  return crypto.timingSafeEqual(Buffer.from(hash), Buffer.from(expected));\n}\n```\n\n## Fee Structure (Managed Mode)\n\n| Fee Type | Rate | When |\n|----------|------|------|\n| Platform Fee | 3.5% | On call/chat usage |\n| Expert Payout | 1.0% | When experts withdraw |\n| Business Payout | 1.0% | When you withdraw |\n| Stripe Card | 2.9% + $0.30 | Card charges |\n| Stripe Connect | 0.25% + $0.25 | Payouts |\n\n**No fees on deposits** - only on usage.\n\n## API Reference\n\n### CallPayMin\n\n```typescript\nnew CallPayMin({\n  apiKey: string,      // Your API key\n  baseUrl?: string,    // API URL (default: https://api.callpaymin.com/v1)\n  timeout?: number,    // Request timeout in ms (default: 30000)\n})\n```\n\n### Resources\n\n- `client.users` - User management\n- `client.experts` - Expert management\n- `client.calls` - Call sessions\n- `client.chats` - Chat sessions\n- `client.summaries` - AI summaries\n- `client.organization` - Org settings, API keys, webhooks\n\n## Examples\n\n- [Web Video Call](./examples/web/video-call.html) - Browser-based video calling\n- [React Native](./examples/react-native/VideoCallScreen.tsx) - Mobile video calling\n- [Node.js Server](./examples/node/server-integration.ts) - Backend integration\n\n## TypeScript Support\n\nFull TypeScript support with exported types:\n\n```typescript\nimport type {\n  User,\n  Expert,\n  Call,\n  Chat,\n  Summary,\n  Transaction,\n  PaymentMethod,\n} from '@callpaymin/sdk';\n```\n\n## Error Handling\n\n```typescript\ntry {\n  await client.users.charge('user_123', { amount: 50 });\n} catch (error) {\n  if (error.code === 'CARD_DECLINED') {\n    // Handle declined card\n  } else if (error.code === 'INSUFFICIENT_BALANCE') {\n    // Handle low balance\n  } else {\n    // Handle other errors\n  }\n}\n```\n\n## Support\n\n- Documentation: https://docs.callpaymin.com\n- Email: support@callpaymin.com\n- GitHub Issues: https://github.com/callpaymin/sdk/issues\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-827465ddb7e24a7b54bb1f1545aee25e"}