InfiSend
Sandbox keys issued instantly — no KYC to start

Send SMS & email from one powerful API

Built for developers shipping in Malawi. One key, two channels, a prepaid MWK wallet and delivery webhooks you can trust. Integrate in minutes.

  • Powered by Africa’s Talking & SMTP
  • MWK pay-per-message, no subscriptions
  • All Malawian networks

Why InfiSend

Everything a messaging integration needs, and nothing it doesn’t

The parts that usually take a sprint to build around a provider — retries, refunds, idempotency, delivery state — are the parts we already did.

One API, two channels

SMS through Africa’s Talking and email over SMTP behind a single key, a single wallet and a single set of logs. Same auth, same response shape, same webhook contract.

Sandbox before you pay

Every account gets a sandbox key the moment it is created — no KYC, no top-up. Sandbox mirrors live: the same status transitions, the same webhook payloads, realistic delays and failures.

Prepaid wallet billing

Top up in MWK, get charged per message. Credit is reserved when a send is accepted and finalised when the provider confirms — a failed send is refunded automatically, as its own ledger line.

Delivery webhooks

Signed callbacks on every status change, retried five times with backoff. A delivery that never lands is marked failed and shown to you in the dashboard rather than disappearing quietly.

Templates and bulk sends

Store a Handlebars template once and send it with variables. Upload a CSV and each recipient becomes its own message row, its own job and its own retry — one bad row does not sink the batch.

Logs you can search

Every message, its cost, its provider reference and its full status history — filterable by channel, status and date, and traceable end to end by correlation ID.

Developers

One call, then get on with it

Authenticate with a bearer key, POST a recipient and a body. The API answers 202 Accepted with a message ID as soon as the credit is reserved — it never blocks your request on the provider. Switch the tab to see the same call for the other channel: one path segment changes, and nothing else does.

  • Idempotency keys, so a retried request never double-sends.
  • Per-key rate limits and scopes — an SMS key cannot send email.
  • A correlation ID on every response, echoed into our logs.
  • Signed webhooks for QUEUED → SENT → DELIVERED or FAILED.
Read the full API reference
Request
POST /v1/sms/send
const response = await fetch('https://infisend-api.infi-tech.cloud/v1/sms/send', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.INFISEND_API_KEY}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    to: '+265999000000',
    message: 'Your verification code is 4829',
    idempotencyKey: 'signup-4f2a-otp'
  })
});

const { messageId, status } = await response.json();
Response · 202
application/json
{
  "messageId": "msg_01HZX9K3QWERTY",
  "status": "QUEUED",
  "channel": "SMS",
  "to": "+265999000000",
  "environment": "SANDBOX",
  "estimatedCost": "15.00",
  "duplicate": false,
  "createdAt": "2026-08-13T09:41:22.104Z"
}

Getting started

From signup to first live send

  1. 1

    Create an account

    Email and a password. Your account and its wallet exist immediately.

  2. 2

    Generate a sandbox key

    Available straight away, with the scopes you choose. Build the whole integration against it.

  3. 3

    Verify and top up

    Submit KYC and fund the wallet. Approval plus a minimum balance is what unlocks a live key.

  4. 4

    Swap the key, ship it

    Nothing else changes. The same call that ran in sandbox now sends for real.

Pricing

Pay as you go.

Pay only for what you send, top up whenever you like. No complex tiers, no subscriptions, no credit that expires.

The exact rate for a send depends on the destination network and is shown before you confirm — and on every line of your wallet history afterwards.

Wallet, not invoices

  • SMSfrom MWK 15.00
  • Emailfrom MWK 5.00
  • Sandbox sendsfree
Create your wallet

Questions, answered

Do I need KYC before I can build?

No. Sandbox keys are issued as soon as you sign up and cost nothing to use. KYC approval and a funded wallet are only required for a live key, so the verification wait never blocks integration work.

What happens if a message fails?

The reserved credit is returned to your wallet as an explicit refund line, the message ends in FAILED with the provider’s reason attached, and your webhook is called with that final status. You are never charged for a message the provider did not accept.

How is a send priced?

By channel, destination country and network, resolved from the current pricing table at the moment the send is accepted. A route with no published price is rejected with a clear error rather than being guessed at, so you can never be surprised by a rate.

Is there a subscription or a minimum spend?

Neither. You top the wallet up when you want to and are charged per message. There are no tiers, no monthly fee and no expiry on credit you have already bought.

How do I avoid sending twice?

Pass an idempotencyKey on the send. A repeat of the same key returns the original message instead of queuing a second one, which makes retries after a timeout safe.

Your first message is a sandbox key away

Create an account, generate a key and send your first message before you have decided whether to pay us anything.

Create your account