Skip to content
VanuConnect.

VanuConnect for developers

Build connections.
Bring your own code.

Send messages, follow delivery and check your credits from your own systems. Explore the reference here, without signing in. Create and manage your keys in your account.

SMS & WhatsApp

One messaging endpoint. Channel permissions and provider configuration apply.

Delivery tracking

Look up up to 100 of your message IDs in one request.

Credit balance

Read your credit balance, plan and key permissions before sending.

Explore business APIs

Contacts, bookings, invoices, commerce and Gold Bislama are documented in the versioned business reference. Live translation remains a controlled pilot.

Read the business API reference →

Your first API request

Start with a balance request. It does not send a message or spend messaging credits. API access depends on your account and subscription.

  1. Sign in and create a key under API Keys.
  2. Store the key in your server’s secret environment as VANUCONNECT_API_KEY.
  3. Run this command on your server or in a private terminal.
curl --fail-with-body 'https://zqxcrvjsnunjuelmrydm.supabase.co/functions/v1/check-balance-api' \
  -H "Authorization: Bearer $VANUCONNECT_API_KEY"

Base URL

https://zqxcrvjsnunjuelmrydm.supabase.co/functions/v1

The examples below contain illustrative IDs and values. Sending messages is a live, credit-consuming operation; use a consenting test recipient.

Authentication

Include your VanuConnect API key in the Authorization header on every request. Keys begin with vanu_live_. Do not use your login password, Supabase service role key or a provider credential.

Authorization: Bearer vanu_live_your_api_key

Keep keys on your server. Requests use the account that owns the key; SMS and WhatsApp each require the corresponding channel permission. Disable a compromised key in your account and replace it in your integration.

Send SMS or WhatsApp

POST/send-sms-api

Send one message to one recipient. The same endpoint accepts either channel; SMS is the default. WhatsApp also requires an enabled, configured sender and provider-supported messaging.

Send message request fields
FieldTypeDetails
phone_numberstring · requiredInternational number with country code; +678 for Vanuatu.
messagestring · requiredNon-empty text. SMS maximum: 612 GSM units or 268 Unicode units; multipart SMS consumes additional credits.
channelstring · optional"sms" (default) or "whatsapp".
sender_idstring · optional1–11 letters, numbers or spaces. SMS sender identity is subject to provider support.
scheduled_atstring · optionalFuture timestamp with an explicit timezone, for example an ISO 8601 UTC timestamp. Scheduling support depends on the provider.
curl --fail-with-body -X POST 'https://zqxcrvjsnunjuelmrydm.supabase.co/functions/v1/send-sms-api' \
  -H "Authorization: Bearer $VANUCONNECT_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "phone_number": "+678YOUR_NUMBER",
    "message": "Your appointment reminder from VanuConnect.",
    "channel": "sms"
  }'

For WhatsApp, set channel to "whatsapp". Replace the phone placeholder with a real, consenting recipient before running the example.

Node.js server example
const response = await fetch('https://zqxcrvjsnunjuelmrydm.supabase.co/functions/v1/send-sms-api', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.VANUCONNECT_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    phone_number: '+678YOUR_NUMBER',
    message: 'Your appointment reminder from VanuConnect.',
    channel: 'sms',
  }),
});
const result = await response.json();
if (!response.ok) {
  // Log the returned code and message_id securely. Do not blindly resend.
  throw new Error(result.code ?? 'API_REQUEST_FAILED');
}
console.log(result.message_id);

Successful response · 200

{
  "success": true,
  "message_id": "7fbaa9f8-03cb-4a68-88a2-6f4b879a5918",
  "provider_message_id": "provider-message-id",
  "phone_number": "+678EXAMPLE",
  "channel": "sms",
  "credits_used": 1,
  "credits_remaining": 99
}

A successful response means the provider accepted the message; it does not confirm delivery. Save message_id for status checks. This API does not currently provide a client idempotency-key contract.

Check delivery status

GET/message-status-api?ids=message_id

Pass 1–100 comma-separated message UUIDs in ids. Use VanuConnect’s message_id, rather than the provider’s ID. Unknown IDs and messages owned by another account are omitted.

curl --fail-with-body 'https://zqxcrvjsnunjuelmrydm.supabase.co/functions/v1/message-status-api?ids=7fbaa9f8-03cb-4a68-88a2-6f4b879a5918' \
  -H "Authorization: Bearer $VANUCONNECT_API_KEY"
{
  "messages": [
    {
      "message_id": "7fbaa9f8-03cb-4a68-88a2-6f4b879a5918",
      "status": "delivered",
      "delivered_at": "2026-10-17T01:30:00Z",
      "read_at": null,
      "error": null,
      "updated_at": "2026-10-17T01:30:00Z"
    }
  ]
}

Returned statuses are sent, delivered, failed and read. Poll from your server every 15–30 seconds, batch IDs and stop on a final status. To track WhatsApp reads, continue after delivery where read receipts are supported. Status requests share the key’s rate limit.

Check your credit balance

GET/check-balance-api

Read credits, subscription information and key permissions. Treat the returned credits as messaging credits, rather than a cash balance.

{
  "credits": 100,
  "subscription_plan": "example-plan",
  "subscription_status": "active",
  "account": {
    "email": "developer@example.com",
    "company_name": "Example business"
  },
  "api_key": {
    "name": "Server integration",
    "permissions": {
      "sms": true,
      "whatsapp": false
    },
    "rate_limit_per_minute": 60
  }
}

The quick-start command above calls this endpoint. The response includes account details: keep it private in your integration.

Errors and safe retries

Check the HTTP status and JSON code. Error responses may include a message_id or additional context.

{
  "error": "Rate limit exceeded",
  "code": "RATE_LIMIT_EXCEEDED",
  "retry_after": 30
}
API errors and recovery
HTTPMeaningNext step
400Invalid fields or message IDsFix the request; do not retry unchanged.
401Missing or invalid API keyCheck the Bearer header and key.
402Insufficient creditsCheck and top up your messaging credits.
403Disabled key, channel denied or recipient opted outReview permissions and recipient consent.
404Account not foundCheck your account status with support.
405Unsupported HTTP methodUse the method in the endpoint reference.
429Shared per-key rate limit reachedWait for Retry-After before making another request.
500 / 502 / 503Server or provider failureInspect the error code and message history before deciding to resend.

Rate limits and integration checklist

Limits are configured per API key; the default is 60 requests per minute. Messaging, status and balance requests share that allowance. Read your key’s actual limit from the balance response. On HTTP 429, respect the Retry-After header and retry_after seconds in JSON.

  • Use server-side requests and keep keys out of browser bundles.
  • Store message IDs and batch status lookups.
  • Get recipient consent and respect opt-outs.
  • Monitor credits and handle errors before enabling automated sending.
  • API use currently operates against your live account. No separate public sandbox or outgoing developer webhook subscription is documented here.

Need another integration?

Talk to us about your booking, invoicing, commerce or accounting workflow. This public reference covers the supported key-authenticated messaging endpoints; other product integrations need a separate assessment.