Send messages from PHP with the SendiMessage API
PHP has an official SendiMessage SDK on Packagist: composer require sendimessage/sdk. It needs only ext-curl and ext-json — no framework dependencies — and covers the whole public API surface.
The same client works from vanilla PHP, WordPress hooks, or any framework; non-2xx responses throw an ApiException with the HTTP status and the decoded error body.
What this integration enables
Architecture
- Your application eventAn order ships, a booking nears, a ticket updates
- PHP server codeBuilds the request with credentials from the environment
- SendiMessage APIPOST /send-message returns the queued message
- Managed messaging lineSMS, or iMessage on supported lines and destinations
- Webhook eventsDelivery status and incoming replies post back to your endpoint
Example request
<?php// composer require sendimessage/sdkuse SendImessage\ApiException;use SendImessage\Client;$client = new Client(apiKey: getenv('SENDIMESSAGE_KEY'),apiSecret: getenv('SENDIMESSAGE_SECRET'),);try {$msg = $client->sendMessage(number: '+15555550123',content: 'Hello from SendiMessage',);echo $msg['message_handle'] . ' ' . $msg['status']; // 4e828182-… QUEUED} catch (ApiException $e) {error_log("SendiMessage error {$e->getCode()}: {$e->getMessage()}");throw $e;}
Delivery events and incoming replies
Delivery status and incoming replies arrive as signed webhook events. Verify the signature, then correlate events with your own records via the message_handle returned when you sent.
// "outbound" event → your php endpoint// Verify the SendiMessage-Signature header (t={timestamp},v1=HMAC-SHA256 of// "{timestamp}.{raw body}", keyed with your webhook secret), then use// GET /v2/messages/{message_handle} for authoritative state and match it to// your contact_id in php.
Limitations and honest notes
- iMessage delivery is available on supported messaging lines and destinations. Recipients without iMessage receive SMS when fallback is configured — never assume universal iMessage availability.
- Messages are accepted asynchronously — the API returns status QUEUED and final status arrives via webhook or the message endpoints.
- Official SDKs are published for JavaScript/TypeScript (npm: sendimessage), Python (PyPI: sendimessage), PHP (Composer: sendimessage/sdk), and Go (github.com/sendimessage/sendimessage-go). Every SDK is dependency-free and covers the full public API surface.
Security considerations
- Load the API key pair from the environment — never commit it or embed it in client-side code.
- Verify webhook signatures before processing events.
- Log message handles, not message bodies, in shared logs.
Frequently asked questions
Is there an official PHP SDK for SendiMessage?
What does the API return when I send a message?
Can I send iMessage from PHP?
Related integrations
Ready to connect PHP?
Request a messaging line and a SendiMessage integration specialist will review your PHP workflow and guide the setup.