Pulse integrates with multiple APIs to provide its functionality. This document covers the API integrations and endpoints.
https://api.flashapp.me/graphql
headers: {
'Authorization': `Bearer ${FLASH_API_KEY}`
}query GetBalance {
me {
defaultAccount {
wallets {
id
balance
walletCurrency
}
}
}
}query TransactionHistory($first: Int!, $after: String) {
me {
defaultAccount {
transactions(first: $first, after: $after) {
edges {
node {
id
status
direction
memo
createdAt
settlementAmount
settlementCurrency
settlementDisplayAmount
settlementDisplayCurrency
initiation {
... on InitiationViaLn {
paymentHash
}
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
}
}mutation SendPayment($input: LnInvoicePaymentInput!) {
lnInvoicePaymentSend(input: $input) {
status
transaction {
id
status
direction
memo
createdAt
}
errors {
message
code
}
}
}mutation CreateInvoice($input: LnUsdInvoiceCreateInput!) {
lnUsdInvoiceCreate(input: $input) {
invoice {
paymentRequest
paymentHash
expiresAt
}
errors {
message
code
}
}
}https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent
{
contents: [{
parts: [{
text: "User message"
}]
}],
generationConfig: {
temperature: 0.7,
topK: 1,
topP: 1,
maxOutputTokens: 2048
}
}https://api.elevenlabs.io/v1/text-to-speech/{voice_id}
{
text: "Text to synthesize",
model_id: "eleven_monolingual_v1",
voice_settings: {
stability: 0.5,
similarity_boost: 0.5
}
}https://api.openai.com/v1/audio/transcriptions
const formData = new FormData();
formData.append('file', audioFile);
formData.append('model', 'whisper-1');
formData.append('language', 'en');client.on('message', async (message: Message) => {
// Handle incoming message
});
client.on('message_create', async (message: Message) => {
// Handle sent and received messages
});client.on('qr', (qr: string) => {
// Display QR code for authentication
});
client.on('ready', () => {
// Client is ready to receive messages
});
client.on('disconnected', (reason: string) => {
// Handle disconnection
});GET /admin/status
Response:
{
"connected": true,
"phoneNumber": "+1234567890",
"uptime": 3600,
"version": "2.0.0"
}POST /admin/reconnect
Response:
{
"success": true,
"qrCode": "data:image/png;base64,..."
}GET /health
Response:
{
"status": "ok",
"timestamp": "2024-01-01T00:00:00Z",
"services": {
"whatsapp": "connected",
"redis": "connected",
"flash": "connected"
}
}Pulse can receive webhooks for payment notifications:
POST /webhooks/payment
Payload:
{
"event": "payment.received",
"data": {
"amount": 1000,
"currency": "USD",
"memo": "Payment memo",
"from": "sender_username"
}
}INSUFFICIENT_BALANCE: Not enough balanceINVALID_PAYMENT_REQUEST: Invalid Lightning invoiceEXPIRED_PAYMENT_REQUEST: Invoice has expiredROUTE_NOT_FOUND: No route to destination
USER_NOT_LINKED: User hasn't linked their Flash accountINVALID_COMMAND: Command not recognizedRATE_LIMITED: Too many requestsSESSION_EXPIRED: WhatsApp session expired
- Flash API: 100 requests per minute
- Gemini AI: 60 requests per minute
- ElevenLabs: 100 characters per second
- OpenAI: 50 requests per minute
- Balance: 30 seconds TTL
- Exchange rates: 5 minutes TTL
- User sessions: 24 hours TTL
- Transaction history: 1 minute TTL