Texto for Developers

    One bearer key, one POST /send call, and you're delivering SMS to Australian and New Zealand mobiles. Signed webhooks for delivery receipts and replies, and account management endpoints when you're sending on behalf of your own customers.

    Full API reference

    5 free credits on signup · 3¢ per SMS to Australia · No contracts

    The Texto SMS API is a REST API for sending SMS to Australian and New Zealand mobile numbers. You authenticate with a bearer API key and POST JSON to a single /send endpoint, which works from any language with an HTTP client — Node.js, PHP, Python and .NET examples are below. Delivery receipts and inbound replies are pushed to your own HTTPS endpoint as HMAC-SHA256 signed webhooks.

    Quickstart

    Three steps from signup to a delivered message.

    Step 1

    Create an API key

    Sign up free and generate a key from your account settings. Every new account gets 5 credits to test with.

    Step 2

    POST to /send

    Send JSON with a to number in international format and your message body. You get a message_id back straight away.

    Step 3

    Listen for webhooks

    Point Texto at your HTTPS endpoint to receive signed delivery receipts and inbound replies as they happen.

    SDKs and packages for message sending

    Texto is a plain JSON REST API, so there's no proprietary SDK to install or keep up to date. Drop the snippet for your stack into a small client class and you're done — install, send and error handling for Node.js, PHP, Python and .NET below.

    Send an SMS with Node.js

    No package required — Node 18+ ships with fetch

    # Node 18 and above has fetch built in.
    # On older versions, add a fetch polyfill:
    npm install node-fetch

    Send a message

    // texto.js
    const TEXTO_API_KEY = process.env.TEXTO_API_KEY;
    
    export async function sendSms({ to, message, from, campaign }) {
      const response = await fetch("https://api.texto.com.au/send", {
        method: "POST",
        headers: {
          Authorization: `Bearer ${TEXTO_API_KEY}`,
          "Content-Type": "application/json",
        },
        body: JSON.stringify({ to, message, from, campaign }),
      });
    
      const data = await response.json();
      if (!response.ok) {
        throw new Error(`Texto ${response.status}: ${data.error ?? "request failed"}`);
      }
      return data;
    }
    
    const result = await sendSms({
      to: "+61412345678",
      message: "Your order has shipped.",
      campaign: "order-updates",
    });
    console.log(result.message_id, result.credits_remaining);

    Handle errors

    try {
      await sendSms({ to: "+61412345678", message: "Hello" });
    } catch (err) {
      // 401 invalid key · 402 out of credits · 422 invalid number · 429 rate limited
      console.error(err.message);
    }

    Ship your first message today

    Free account, 5 credits to test with, and a key you can generate in under a minute. 3¢ per SMS to Australia after that — no contracts, no platform fee.