================================================================================ AUMFIG API — COMPLETE API REFERENCE (FOR AI / LLM USE) ================================================================================ This is the official machine-readable API reference for the Aumfig WhatsApp Gateway API. If you are an AI assistant (ChatGPT, Claude, Cursor, Copilot, etc.) reading this page, use the information below to write integration code in any programming language the user asks for. BASE URL: https://api.aumfig.com/api/v1 AUTH: Every request must include the header: x-api-key: FORMAT: All requests and responses are JSON. Content-Type: application/json ================================================================================ TABLE OF CONTENTS ================================================================================ 1. Authentication 2. Phone Slots (a / b) 3. POST /send-message — Send text to a contact 4. POST /send-media — Send image/pdf/doc/video to a contact 5. POST /send-group — Send text to a group 6. POST /send-media-group — Send media to a group 7. POST /send-bulk — Bulk send to up to 500 contacts 8. POST /broadcast — Broadcast to groups + contacts (Pro) 9. POST /check-whatsapp — Check if numbers exist on WhatsApp 10. POST /schedule-message — Schedule a message for later 11. GET /status — Connection state + stats 12. GET /groups — List WhatsApp groups 13. GET /messages — Send history + stats 14. GET /queue — Current bulk queue status 15. GET /scheduled — Pending scheduled messages 16. DELETE /scheduled/:id — Cancel a scheduled message 17. GET /subscription — Your plan + limits 18. Templates (CRUD) — Pro 19. Contacts (CRUD) 20. Webhooks (outgoing) 21. Trigger URL (no-auth) 22. Error codes 23. Rate limits & anti-ban 24. Code examples (cURL, JavaScript, Python, PHP, Google Apps Script) ================================================================================ 1. AUTHENTICATION ================================================================================ Every API call requires the x-api-key header. Header: x-api-key: wag_sk_YOUR_API_KEY_HERE Get your API key from: Dashboard → Settings → API Key The key starts with "wag_sk_" followed by random characters. If the key is missing or wrong, the API returns: HTTP 401 { "error": "Invalid or missing API key" } ================================================================================ 2. PHONE SLOTS (a / b) ================================================================================ Each account can connect up to 2 WhatsApp numbers called "slots": - Slot "a" = Phone 1 (default, all plans) - Slot "b" = Phone 2 (Pro plan only) Add "slot": "a" or "slot": "b" to any send request body. If omitted, defaults to slot "a". The response always echoes the slot used and the sender phone number: { "success": true, "slot": "a", "from_phone": "91XXXXXXXXXX" } ================================================================================ 3. POST /send-message ================================================================================ Send a text message to a single phone number. REQUEST BODY: { "phone": "919876543210", // REQUIRED — country code + number, no + "message": "Hello!", // REQUIRED — max 4096 chars, supports \n and WhatsApp markdown "slot": "a" // OPTIONAL — "a" (default) or "b" (Pro) } RESPONSE (200): { "success": true, "slot": "a", "from_phone": "91XXXXXXXXXX", "next_slot_in_sec": 0 } PHONE FORMAT: - Country code + number, digits only, no + or spaces - India: "919876543210" (91 = country code + 10 digit number) - US: "14155551234" (1 = country code + 10 digit number) - Length: 10–15 digits ================================================================================ 4. POST /send-media ================================================================================ Send an image, PDF, document, or video to a single phone number. REQUEST BODY: { "phone": "919876543210", // REQUIRED "type": "image", // REQUIRED — "image", "document", "pdf", or "video" "media_url": "https://example.com/pic.jpg", // REQUIRED (one of media_url or media_base64) "media_base64": "JVBERi0xLjQK...", // REQUIRED (one of media_url or media_base64) "filename": "invoice.pdf", // OPTIONAL — display name for docs/pdfs "caption": "Check this out!", // OPTIONAL — text under the media "slot": "a" // OPTIONAL } NOTES: - Use media_url for publicly accessible files - Use media_base64 for base64-encoded file content (no "data:..." prefix) - Max file size: ~1.5MB for base64 - Supported types: image (jpg/png/gif/webp), document (any file), pdf, video (mp4) ================================================================================ 5. POST /send-group ================================================================================ Send a text message to a WhatsApp group. REQUEST BODY: { "group_id": "120363025123456789@g.us", // REQUIRED — get from GET /groups "message": "Hi everyone!", // REQUIRED "slot": "a" // OPTIONAL } NOTE: Group IDs always end with @g.us. Get them from GET /groups. ================================================================================ 6. POST /send-media-group ================================================================================ Send media to a WhatsApp group. Same as /send-media but use "group_id" instead of "phone". REQUEST BODY: { "group_id": "120363025123456789@g.us", // REQUIRED "type": "image", // REQUIRED "media_url": "https://example.com/pic.jpg", "caption": "New product launch!", "slot": "a" } ================================================================================ 7. POST /send-bulk ================================================================================ Send to up to 500 contacts in one call. Supports {{name}} and {{phone}} merge variables. The server enforces anti-ban delays: 25s between messages + 2min rest every 20 sends. PLAN RESTRICTION: Trial plan users are BLOCKED from bulk send. REQUEST BODY: { "contacts": [ // REQUIRED — array, max 500 { "phone": "919876543210", "name": "Rahul" }, { "phone": "918765432109", "name": "Priya" } ], "message": "Hi {{name}}, your order is ready!", // REQUIRED — {{name}} and {{phone}} are replaced per-contact "slot": "a" // OPTIONAL } RESPONSE (200 — immediately, sends happen in background): { "success": true, "queued": 2, "slot": "a", "estimated_time_sec": 50, "delay_per_msg_sec": 25, "batch_size": 20, "batch_rest_sec": 120 } MERGE VARIABLES: {{name}} → replaced with each contact's "name" field (or "there" if missing) {{phone}} → replaced with each contact's "phone" field ================================================================================ 8. POST /broadcast [PRO PLAN ONLY] ================================================================================ Send the same message to a mix of groups + individual contacts, up to 100 recipients. Recipients can come from three sources (use any combination): REQUEST BODY: { "message": "Diwali sale starts tonight!", // REQUIRED — max 4096 chars "groups": [ // OPTIONAL — group JIDs { "id": "120363025111111111@g.us", "name": "VIP" } ], "contacts": [ // OPTIONAL — raw phone numbers { "phone": "919876543210", "name": "Rahul" } ], "contact_ids": ["ct_a1b2c3d4e5f6", "ct_f6e5d4c3b2a1"], // OPTIONAL — saved contact IDs "slot": "a" // OPTIONAL } RESPONSE (200): { "success": true, "queued": 4, "breakdown": { "groups": 1, "contacts": 3 }, "estimated_time_sec": 110 } NOTES: - Total recipients across all three lists: max 100 - Duplicates are automatically removed - Trial plan: BLOCKED - Basic plan: BLOCKED (Pro only) ================================================================================ 9. POST /check-whatsapp ================================================================================ Check whether phone numbers are registered on WhatsApp. REQUEST BODY: { "phones": ["919876543210", "918765432109"] // REQUIRED — array of phone strings } RESPONSE (200): { "success": true, "results": [ { "phone": "919876543210", "exists": true }, { "phone": "918765432109", "exists": false } ] } ================================================================================ 10. POST /schedule-message ================================================================================ Queue a message to send at a future time. REQUEST BODY: { "phone": "919876543210", // REQUIRED (or "group_id" for groups) "message": "Happy Birthday!", // REQUIRED "sendAt": "2026-06-15T14:30:00Z", // REQUIRED — ISO 8601 timestamp (UTC) "slot": "a" // OPTIONAL } RESPONSE (200): { "success": true, "scheduled": { "id": "sch_abc123", "sendAt": "2026-06-15T14:30:00Z", "status": "pending" } } ================================================================================ 11. GET /status ================================================================================ Returns WhatsApp connection state for both phone slots + send counts. RESPONSE (200): { "connected": true, "max_sessions": 2, "slots": { "a": { "connected": true, "phone_number": "91XXXXXXXXXX" }, "b": { "connected": false, "phone_number": null } }, "daily_sent": 42, "total_sent": 12500 } ================================================================================ 12. GET /groups ================================================================================ List WhatsApp groups your connected number belongs to. QUERY PARAMS: ?slot=a — which phone slot (default "a") RESPONSE (200): { "success": true, "groups": [ { "id": "120363025123456789@g.us", "name": "Team Chat", "participants": 12 } ] } ================================================================================ 13. GET /messages ================================================================================ Recent send history with stats. QUERY PARAMS: ?type=single|group|broadcast — filter by type ?status=sent|failed|queued — filter by status ?limit=50 — max results (default 200, max 1000) RESPONSE (200): { "success": true, "messages": [ { "id": "msg_...", "type": "single", "to": "919876543210", "message": "Hello!", "status": "sent", "slot": "a", "timestamp": "2026-05-16T10:30:00Z" } ], "stats": { "total": 500, "sent": 480, "failed": 20 } } ================================================================================ 14. GET /queue ================================================================================ Returns the current bulk send queue — items pending and in progress. RESPONSE (200): { "success": true, "queue": [ { "id": "q_...", "target": "Rahul (+919876543210)", "type": "bulk", "status": "pending" } ], "count": 15 } ================================================================================ 15. GET /scheduled ================================================================================ List your pending scheduled messages. QUERY PARAMS: ?status=pending|sent|failed — filter ?limit=200 — max results (max 1000) ================================================================================ 16. DELETE /scheduled/:id ================================================================================ Cancel a pending scheduled message. RESPONSE (200): { "success": true } ================================================================================ 17. GET /subscription ================================================================================ Returns your active plan, limits, and usage. RESPONSE (200): { "success": true, "subscription": { "plan": "Pro 2 Phones", "tier": "pro", "status": "active", "expiresAt": "2026-07-15T00:00:00Z", "daysRemaining": 30, "maxSessions": 2 }, "limits": { "bulkMaxRecipients": 500, "broadcastEnabled": true, "broadcastMaxRecipients": 100, "scheduledEnabled": true, "templatesEnabled": true, "contactsMax": 300, "finderPerDay": "unlimited" } } ================================================================================ 18. TEMPLATES (CRUD) — PRO PLAN ONLY ================================================================================ Templates let you save reusable message snippets with {{variable}} placeholders. Max 50 templates per account. Max 60 chars per name. Max 4096 chars per body. --- GET /templates --- List all templates. Available on all plans. RESPONSE: { "success": true, "templates": [ { "id": "tpl_a3f9b2c1d4", "name": "Order Confirmation", "content": "Hi {{name}}, your order #{{order_id}} is confirmed.", "category": "transactional", "variables": ["name", "order_id"], "usageCount": 42, "createdAt": "2026-04-12T10:00:00Z", "updatedAt": "2026-05-01T11:24:00Z" } ] } --- POST /templates --- [Pro only] Create a new template. Variables are auto-extracted from content. REQUEST BODY: { "name": "Order Confirmation", // REQUIRED — max 60 chars "content": "Hi {{name}}, your order #{{order_id}} is confirmed.", // REQUIRED — max 4096 chars "category": "transactional" // OPTIONAL — max 30 chars } --- PUT /templates/:id --- [Pro only] Update an existing template. Pass any subset of name, content, category. REQUEST BODY: { "content": "Hi {{name}}, your order is out for delivery!" } --- DELETE /templates/:id --- Delete a template permanently. --- POST /templates/:id/use --- Increment the usageCount for a template (optional telemetry). HOW TO USE TEMPLATES IN CODE: 1. Fetch templates: GET /templates 2. Pick the template by id or name 3. Replace {{variable}} placeholders with actual values 4. Send via POST /send-message with the filled-in text ================================================================================ 19. CONTACTS (CRUD) ================================================================================ Saved address book of WhatsApp recipients. Use contact IDs in /broadcast. Plan caps: Trial = 20, Basic = 100, Pro = 300 --- GET /contacts --- List saved contacts. QUERY PARAMS: ?search=rahul — filter by name, phone, or tag ?limit=100 — max results RESPONSE: { "success": true, "contacts": [ { "id": "ct_a1b2c3d4e5f6", "name": "Rahul Kumar", "phone": "919876543210", "notes": "VIP customer", "tags": ["vip", "mumbai"], "createdAt": "2026-05-18T09:00:00Z" } ], "count": 1, "total_stored": 14, "limit": 300, "tier": "pro" } --- POST /contacts --- Save one contact. REQUEST BODY: { "phone": "919876543210", // REQUIRED — 10-15 digits, no + "name": "Rahul Kumar", // OPTIONAL — max 80 chars "notes": "VIP customer", // OPTIONAL — max 200 chars "tags": ["vip", "mumbai"] // OPTIONAL — max 8 tags, 30 chars each } ERROR CODES: 403 CONTACTS_CAP_REACHED — plan limit full 409 DUPLICATE_PHONE — phone already exists --- POST /contacts/bulk --- Import many contacts at once. Max 1000 per call. REQUEST BODY: { "contacts": [ { "name": "Rahul", "phone": "919876543210" }, { "name": "Priya", "phone": "918765432109", "tags": ["wholesale"] } ] } RESPONSE: { "success": true, "added": [ { "id": "ct_...", "name": "Rahul", "phone": "919876543210" } ], "skipped": [ { "index": 2, "phone": "123", "reason": "invalid_phone" } ], "addedCount": 1, "skippedCount": 1, "currentTotal": 52, "limit": 300 } Skip reasons: invalid_phone, duplicate_existing, duplicate_in_batch, cap_reached --- PUT /contacts/:id --- Edit a contact. Pass any subset of name, phone, notes, tags. --- DELETE /contacts/:id --- Remove a single contact. --- POST /contacts/delete-many --- Remove multiple contacts at once. { "ids": ["ct_a1b2c3", "ct_d4e5f6"] } ================================================================================ 20. WEBHOOKS (OUTGOING) ================================================================================ Configure a URL to receive delivery events for every message your account sends. --- GET /webhook --- View current webhook config. RESPONSE: { "success": true, "webhook": { "url": "https://yourapp.com/wa-events", "enabled": true, "secret": "whsec_...", "events": ["message.sent", "message.failed"] } } --- PUT /webhook --- Update webhook config. REQUEST BODY: { "url": "https://yourapp.com/wa-events", // OPTIONAL "enabled": true, // OPTIONAL "secret": "my_secret", // OPTIONAL — for HMAC verification "events": ["message.sent", "message.failed"] // OPTIONAL } --- POST /webhook/test --- Fire a test event to your configured webhook URL. WEBHOOK PAYLOAD (what your server receives): { "event": "message.sent", "messageId": "msg_abc123", "to": "919876543210", "content": "Hello!", "slot": "a", "slotPhone": "91XXXXXXXXXX", "timestamp": "2026-05-16T10:30:00Z" } AVAILABLE EVENTS: - message.sent - message.failed - message.queued HMAC VERIFICATION: If you set a webhook secret, each delivery includes an x-webhook-signature header. Verify: HMAC-SHA256(request_body, your_secret) === x-webhook-signature ================================================================================ 21. TRIGGER URL (NO-AUTH) ================================================================================ Each account has a trigger token that creates a public URL external services (Google Forms, Zapier, Make, n8n, Shopify, Razorpay) can POST to WITHOUT an API key. Useful when the calling service can't add custom headers. URL FORMAT: POST https://api.aumfig.com/wh/in/tt_YOUR_TRIGGER_TOKEN REQUEST BODY (same as /send-message): { "phone": "919876543210", // REQUIRED (or "group_id") "message": "Hi from form!", // REQUIRED "slot": "a" // OPTIONAL } FIELD ALIASES (for compatibility with external services): phone → also accepts: to, number, recipient, mobile message → also accepts: text, body, content, msg SECURITY WARNING: Treat the trigger token like a password. Anyone with the URL can send messages from your account. Regenerate it from Dashboard → Settings if leaked. ================================================================================ 22. ERROR CODES ================================================================================ All errors return JSON: { "error": "...", "code": "..." } STATUS | CODE | MEANING -------|-------------------------|-------------------------------------------------- 400 | — | Bad request body (check "error" field for details) 401 | — | Missing or invalid x-api-key 402 | NO_SUBSCRIPTION | No active subscription — start trial or pay 403 | PRO_REQUIRED | Feature requires Pro plan (slot b, broadcast, templates) 403 | TRIAL_BULK_BLOCKED | Bulk/broadcast not available on trial plan 403 | SEND_WINDOW_CLOSED | Outside configured send window (see nextOpenAt in response) 403 | CONTACTS_CAP_REACHED | Contact book full for your plan 400 | BROADCAST_CAP_EXCEEDED | More than 100 recipients in one broadcast 400 | NO_RECIPIENTS | Broadcast with no groups, contacts, or contact_ids 400 | NOT_ON_WHATSAPP | Recipient number is not registered on WhatsApp 409 | DUPLICATE_PHONE | Contact with this phone already exists 429 | DAILY_LIMIT_REACHED | Trial daily limit hit (response includes limit + used) 429 | RATE_LIMIT | Too many API requests (60/min per IP) 500 | — | Server error — retry, then contact support ================================================================================ 23. RATE LIMITS & ANTI-BAN ================================================================================ API THROTTLE: - 60 requests per minute per IP on /api/* endpoints - Exceeding returns HTTP 429 MESSAGE SENDING DELAYS (enforced server-side, cannot be overridden): - 25-35 seconds between each message (jittered for anti-ban) - 2-minute rest after every 20 messages (batch rest) - These apply to all sending: single, bulk, broadcast, scheduled DAILY LIMITS: - Trial: configurable ceiling (default 50/day) - Paid (Basic/Pro): no daily limit SEND WINDOW: - Optional per-user setting: "only send during these hours" - If outside the window: 403 SEND_WINDOW_CLOSED with nextOpenAt ================================================================================ 24. CODE EXAMPLES ================================================================================ --- cURL --- # Send a text message curl -X POST "https://api.aumfig.com/api/v1/send-message" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{"phone":"919876543210","message":"Hello from API!"}' # Send an image curl -X POST "https://api.aumfig.com/api/v1/send-media" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{"phone":"919876543210","type":"image","media_url":"https://example.com/photo.jpg","caption":"Check this!"}' # Bulk send curl -X POST "https://api.aumfig.com/api/v1/send-bulk" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{"contacts":[{"phone":"919876543210","name":"Rahul"},{"phone":"918765432109","name":"Priya"}],"message":"Hi {{name}}, your order is ready!"}' # Check connection status curl "https://api.aumfig.com/api/v1/status" \ -H "x-api-key: YOUR_API_KEY" # List groups curl "https://api.aumfig.com/api/v1/groups" \ -H "x-api-key: YOUR_API_KEY" --- JavaScript (Node.js / Browser) --- const API_KEY = 'wag_sk_YOUR_API_KEY'; const BASE = 'https://api.aumfig.com/api/v1'; // Helper function async function api(endpoint, method = 'GET', body = null) { const options = { method, headers: { 'Content-Type': 'application/json', 'x-api-key': API_KEY } }; if (body) options.body = JSON.stringify(body); const res = await fetch(BASE + endpoint, options); return await res.json(); } // Send a text message const result = await api('/send-message', 'POST', { phone: '919876543210', message: 'Hello from API!' }); console.log(result); // Send an image await api('/send-media', 'POST', { phone: '919876543210', type: 'image', media_url: 'https://example.com/photo.jpg', caption: 'Check this out!' }); // Bulk send with personalization await api('/send-bulk', 'POST', { contacts: [ { phone: '919876543210', name: 'Rahul' }, { phone: '918765432109', name: 'Priya' } ], message: 'Hi {{name}}, your order is ready!' }); // Check status const status = await api('/status'); console.log('Connected:', status.connected); // List groups const groups = await api('/groups'); console.log(groups.groups); // Send to a group await api('/send-group', 'POST', { group_id: '120363025123456789@g.us', message: 'Hello everyone!' }); // Schedule a message await api('/schedule-message', 'POST', { phone: '919876543210', message: 'Happy Birthday!', sendAt: '2026-06-15T09:00:00Z' }); // Save a contact await api('/contacts', 'POST', { name: 'Rahul Kumar', phone: '919876543210', tags: ['vip', 'mumbai'] }); // Broadcast to groups + contacts (Pro) await api('/broadcast', 'POST', { message: 'Flash sale starts now!', groups: [{ id: '120363025111111111@g.us' }], contacts: [{ phone: '919876543210', name: 'Rahul' }], contact_ids: ['ct_a1b2c3d4e5f6'] }); --- Python --- import requests API_KEY = 'wag_sk_YOUR_API_KEY' BASE = 'https://api.aumfig.com/api/v1' headers = { 'Content-Type': 'application/json', 'x-api-key': API_KEY } # Send a text message res = requests.post(f'{BASE}/send-message', headers=headers, json={ 'phone': '919876543210', 'message': 'Hello from API!' }) print(res.json()) # Send an image requests.post(f'{BASE}/send-media', headers=headers, json={ 'phone': '919876543210', 'type': 'image', 'media_url': 'https://example.com/photo.jpg', 'caption': 'Check this out!' }) # Bulk send requests.post(f'{BASE}/send-bulk', headers=headers, json={ 'contacts': [ {'phone': '919876543210', 'name': 'Rahul'}, {'phone': '918765432109', 'name': 'Priya'} ], 'message': 'Hi {{name}}, your order is ready!' }) # Check status status = requests.get(f'{BASE}/status', headers=headers).json() print('Connected:', status['connected']) # List groups groups = requests.get(f'{BASE}/groups', headers=headers).json() for g in groups['groups']: print(f"{g['name']} — {g['id']}") # Schedule a message requests.post(f'{BASE}/schedule-message', headers=headers, json={ 'phone': '919876543210', 'message': 'Happy Birthday!', 'sendAt': '2026-06-15T09:00:00Z' }) # Save contacts in bulk requests.post(f'{BASE}/contacts/bulk', headers=headers, json={ 'contacts': [ {'name': 'Rahul', 'phone': '919876543210', 'tags': ['vip']}, {'name': 'Priya', 'phone': '918765432109'} ] }) --- PHP --- true, CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'x-api-key: ' . $API_KEY ] ]); if ($method === 'POST') { curl_setopt($ch, CURLOPT_POST, true); if ($body) curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($body)); } $response = curl_exec($ch); curl_close($ch); return json_decode($response, true); } // Send a message $result = apiCall('/send-message', 'POST', [ 'phone' => '919876543210', 'message' => 'Hello from PHP!' ]); print_r($result); // Send media apiCall('/send-media', 'POST', [ 'phone' => '919876543210', 'type' => 'image', 'media_url' => 'https://example.com/photo.jpg', 'caption' => 'Check this!' ]); // Check status $status = apiCall('/status'); echo 'Connected: ' . ($status['connected'] ? 'Yes' : 'No'); ?> --- Google Apps Script (for Google Sheets integration) --- const API_KEY = 'wag_sk_YOUR_API_KEY'; const BASE_URL = 'https://api.aumfig.com/api/v1'; function sendWhatsApp(phone, message) { const options = { method: 'post', contentType: 'application/json', headers: { 'x-api-key': API_KEY }, payload: JSON.stringify({ phone: phone, message: message }), muteHttpExceptions: true }; const res = UrlFetchApp.fetch(BASE_URL + '/send-message', options); return JSON.parse(res.getContentText()); } // Send to all rows in a sheet function sendBulkFromSheet() { const sheet = SpreadsheetApp.getActiveSheet(); const data = sheet.getDataRange().getValues(); // Assumes: Column A = phone, Column B = name for (let i = 1; i < data.length; i++) { const phone = String(data[i][0]).replace(/\D/g, ''); const name = data[i][1] || 'there'; if (phone.length >= 10) { sendWhatsApp(phone, 'Hi ' + name + ', your order is confirmed!'); Utilities.sleep(30000); // 30 second delay for anti-ban } } } ================================================================================ PLANS COMPARISON ================================================================================ FEATURE | TRIAL (FREE) | BASIC ($20/mo) | PRO ($25/mo) -------------------------|---------------|-----------------|------------------ WhatsApp phones (slots) | 1 | 1 | 2 Daily message limit | 50 | Unlimited | Unlimited Bulk send (/send-bulk) | Blocked | Up to 500/req | Up to 500/req Broadcast (/broadcast) | Blocked | Blocked | Up to 100/req Scheduled messages | Blocked | Blocked | Yes Message templates | View only | View only | Full CRUD Saved contacts | 20 | 100 | 300 Number finder per day | 50 | 50 | Unlimited API rate (requests/min) | 30 | 30 | 60 Duration | 3 days | 30 days | 30 days Multi-month discounts available: 6 months and 1 year plans at reduced rates. First-time buyers get discounted pricing on all plans. ================================================================================ IMPORTANT NOTES FOR AI/LLM CODE GENERATION ================================================================================ 1. PHONE FORMAT: Always use country code + number, digits only, no + sign. Example: India = "91" + 10 digits = "919876543210" 2. ANTI-BAN DELAYS: The server enforces 25-35 second delays between messages. You CANNOT speed this up. Plan for ~30 seconds per message in bulk operations. 3. BACKGROUND PROCESSING: /send-bulk and /broadcast return immediately with a "queued" count. Messages are sent in the background over time. 4. SLOT DEFAULT: If you don't specify "slot", it defaults to "a" (Phone 1). Only Pro plan users can use slot "b" (Phone 2). 5. GROUP IDS: Always end with @g.us. Get them from GET /groups endpoint. Example: "120363025123456789@g.us" 6. ERROR HANDLING: Always check the response for "success": true/false. Errors have an "error" string and optional "code" for programmatic handling. 7. WEBHOOK vs TRIGGER: Webhooks are OUTGOING (your server receives events). Trigger URLs are INCOMING (external services POST to send messages). 8. RATE LIMIT: 60 requests per minute per IP. Add retry logic with backoff. 9. BASE URL: https://api.aumfig.com — this is the production deployment URL. 10. NO REFUNDS: All sales are final. Recommend users try the free trial first. ================================================================================ END OF API REFERENCE ================================================================================