PHPackages                             ghijk/smseveryone-sdk - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. ghijk/smseveryone-sdk

ActiveLibrary[API Development](/categories/api)

ghijk/smseveryone-sdk
=====================

Laravel SDK for the SMSEveryone API using Saloon

v1.0.0(3mo ago)00MITPHPPHP ^8.2CI passing

Since Mar 11Pushed 3mo agoCompare

[ Source](https://github.com/1stevengrant/smseveryone-sdk)[ Packagist](https://packagist.org/packages/ghijk/smseveryone-sdk)[ RSS](/packages/ghijk-smseveryone-sdk/feed)WikiDiscussions main Synced 3w ago

READMEChangelogDependencies (6)Versions (2)Used By (0)

SMSEveryone SDK for Laravel
===========================

[](#smseveryone-sdk-for-laravel)

A Laravel SDK for the [SMSEveryone](https://smseveryone.com) SMS API, built with [Saloon](https://docs.saloon.dev).

Requirements
------------

[](#requirements)

- PHP 8.2+
- Laravel 11 or 12

Installation
------------

[](#installation)

```
composer require ghijk/smseveryone-sdk
```

The service provider and facade are auto-discovered.

Publish the config file:

```
php artisan vendor:publish --tag=smseveryone-config
```

Configuration
-------------

[](#configuration)

Add your credentials to `.env`:

```
SMSEVERYONE_API_KEY=your-base64-encoded-key
SMSEVERYONE_DEFAULT_ORIGINATOR=61400190499
```

Your API key is your `username:password` base64 encoded. For example, if your username is `jimsbusiness` and password is `s56sbdyte83fs`:

```
jimsbusiness:s56sbdyte83fs → base64 → amltc2J1c2luZXNzOnM1NnNiZHl0ZTgzZnM=

```

Config options (`config/smseveryone.php`):

```
return [
    'api_key' => env('SMSEVERYONE_API_KEY', ''),
    'base_url' => env('SMSEVERYONE_BASE_URL', 'https://smseveryone.com/api'),
    'default_originator' => env('SMSEVERYONE_DEFAULT_ORIGINATOR', ''),
    'timeout' => [
        'connect' => env('SMSEVERYONE_CONNECT_TIMEOUT', 10),
        'request' => env('SMSEVERYONE_REQUEST_TIMEOUT', 30),
    ],
];
```

Usage
-----

[](#usage)

Use the `SmsEveryone` facade or inject `Ghijk\SmsEveryoneSdk\SmsEveryone` via dependency injection.

### Sending SMS

[](#sending-sms)

```
use Ghijk\SmsEveryoneSdk\Facades\SmsEveryone;

// Send to one recipient
$response = SmsEveryone::sendSms('Hello!', ['61400123456']);

if ($response->successful()) {
    echo "Campaign ID: {$response->campaignId}";
    echo "Credits used: {$response->credits}";
}

// Send to multiple recipients
$response = SmsEveryone::sendSms(
    message: 'Hello everyone!',
    destinations: ['61400123456', '61400123999'],
    originator: '61400190499',
);

// Schedule for later (format: YYYYMMDDHHMM)
$response = SmsEveryone::scheduleSms(
    message: 'Reminder: appointment tomorrow',
    destinations: ['61400123456'],
    timeScheduled: '202503121300',
    reference: 'appt-reminder-123',
);

// Send to a stored CRM list
$response = SmsEveryone::sendToList(
    message: 'Weekly update',
    crmIds: [4398],
);
```

### Managing Campaigns

[](#managing-campaigns)

```
// Check campaign status
$response = SmsEveryone::campaignStatus('11967222');
echo $response->message; // "Scheduled", "Running", "Paused", "Deleted"

// Modify a scheduled campaign
SmsEveryone::modifyCampaign(
    campaignId: '11967222',
    message: 'Updated message text',
    timeScheduled: '202503121400',
);

// Pause / unpause / delete
SmsEveryone::pauseCampaign('11967222');
SmsEveryone::unpauseCampaign('11967222');
SmsEveryone::deleteCampaign('11967222');
```

### Delivery Reports

[](#delivery-reports)

```
// Check delivery status for entire campaign
$report = SmsEveryone::deliveryStatus('11967215');

foreach ($report->destinations as $status) {
    echo "{$status->destination}: {$status->status->label()}";
    // "61400123456: Delivered"

    if ($status->delivered()) {
        // Message delivered successfully
    }

    if ($status->failed()) {
        echo "Error: {$status->errorCode->description()}";

        if ($status->errorCode->isPermanent()) {
            // Remove this number from your database
        }
    }
}

// Check a specific number
$report = SmsEveryone::deliveryStatus('11967215', '61400123456');
```

### Replies

[](#replies)

```
// Get new replies (marks them as retrieved)
$replies = SmsEveryone::replies();

foreach ($replies->messages as $reply) {
    echo "From: {$reply->originator}";
    echo "To: {$reply->recipient}";
    echo "Message: {$reply->messageText}";
    echo "Received: {$reply->received}";
}

// Test mode (won't mark as retrieved)
$replies = SmsEveryone::replies(test: true);

// Filter by date range (max 30 days)
$replies = SmsEveryone::replies(
    dateStart: '2025-03-01',
    dateEnd: '2025-03-11',
);

// Filter by days back (max 7)
$replies = SmsEveryone::replies(days: 2);

// Filter by originator number
$replies = SmsEveryone::replies(originator: '61400123456');
```

### Webhook Replies

[](#webhook-replies)

SMSEveryone can POST replies to your URL via HTTP GET. Parse incoming webhooks:

```
use Ghijk\SmsEveryoneSdk\Data\WebhookReply;

Route::get('/sms/webhook', function (Request $request) {
    $reply = WebhookReply::fromRequest($request);

    Log::info("SMS from {$reply->originator}: {$reply->messageText}");

    // Must respond with just "0"
    return response('0', 200)->header('Content-Type', 'text/plain');
});
```

### Account &amp; Credits

[](#account--credits)

```
// Get account settings
$settings = SmsEveryone::userSettings();
echo "Credits: {$settings->credits}";
echo "User ID: {$settings->userId}";
echo "Unicode: " . ($settings->allowUnicode ? 'yes' : 'no');
echo "International: " . ($settings->allowInternational ? 'yes' : 'no');

// Quick credit check
$credits = SmsEveryone::credits(); // returns int

// Add credits to a sub-account (requires pre-approval)
$response = SmsEveryone::addCredits(1000);
if ($response->successful()) {
    echo "New balance: {$response->credits}";
}
```

### Opt-outs

[](#opt-outs)

```
// Unsubscribe numbers
SmsEveryone::addOptOuts(['61400123456', '61400222333']);

// Resubscribe a number
SmsEveryone::deleteOptOuts(['61400123456']);

// List all opted-out numbers
$list = SmsEveryone::listOptOuts();
foreach ($list->optOuts as $optOut) {
    echo "{$optOut->originator} - {$optOut->reason} ({$optOut->added})";
}
```

### CRM Lists

[](#crm-lists)

```
// List all CRM groups
$groups = SmsEveryone::listCrmGroups();
foreach ($groups->groups as $group) {
    echo "{$group->crmId}: {$group->description} ({$group->count} numbers)";
}

// Include deleted lists
$groups = SmsEveryone::listCrmGroups(showDeleted: true);

// Get numbers in a list
$details = SmsEveryone::crmDetails(710);
foreach ($details->records as $number) {
    echo $number; // "61400000000"
}

// Create a new list
$result = SmsEveryone::createCrmList(
    description: 'VIP Clients',
    numbers: ['61400123456', '61400999111'],
);
echo "Created list ID: {$result->crmId}";

// Add numbers to a list
SmsEveryone::appendToCrmList(14456, ['61400111555']);

// Remove numbers from a list
SmsEveryone::removeFromCrmList(14456, ['61400111555']);

// Delete a list
SmsEveryone::deleteCrmList(14456);
```

### MSISDN Formatting

[](#msisdn-formatting)

```
use Ghijk\SmsEveryoneSdk\SmsEveryone;

SmsEveryone::formatMsisdn('0412345678');    // "61412345678"
SmsEveryone::formatMsisdn('+61 412 345 678'); // "61412345678"
SmsEveryone::formatMsisdn('412345678');     // "61412345678"
```

### Direct Connector Access

[](#direct-connector-access)

For advanced use cases, access the Saloon connector directly:

```
$connector = SmsEveryone::connector();

// Send any custom request
$response = $connector->send(new CustomRequest());
```

Error Handling
--------------

[](#error-handling)

All response DTOs have `successful()` and/or `failed()` methods:

```
$response = SmsEveryone::sendSms('Hello', ['61400123456']);

if ($response->failed()) {
    // Check the API error code
    $errorCode = ApiErrorCode::tryFrom($response->code);
    echo $errorCode?->description();
    // "Insufficient credits available to start campaign"
}
```

Key error code enums:

- `ApiErrorCode` - API-level errors (insufficient credits, invalid action, etc.)
- `DeliveryReceiptStatus` - Delivery statuses (Delivered, Failed, Expired, etc.)
- `DeliveryErrorCode` - Carrier-level delivery errors with `isPermanent()` / `isTemporary()`

Phone Number Format
-------------------

[](#phone-number-format)

The API requires phone numbers in international MSISDN format without the `+` sign:

- Australian: `61400123456` (not `0400123456` or `+61400123456`)
- New Zealand: `6421123456`

Use `SmsEveryone::formatMsisdn()` to convert Australian local numbers.

SMS Character Limits
--------------------

[](#sms-character-limits)

**Standard GSM characters:**

- 1 SMS = 160 characters
- 2 SMS = 306 characters (2 x 153)
- Max 2000 characters per message

**Unicode characters (emojis, non-English):**

- 1 SMS = 70 characters
- 2 SMS = 134 characters (2 x 67)

**Extended characters** (counted as 2): `| ^ € { } [ ] ~ \`

Testing
-------

[](#testing)

```
composer test
```

License
-------

[](#license)

MIT

###  Health Score

35

—

LowBetter than 77% of packages

Maintenance80

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

108d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/10068142?v=4)[ghijk](/maintainers/ghijk)[@ghijk](https://github.com/ghijk)

---

Top Contributors

[![1stevengrant](https://avatars.githubusercontent.com/u/112473?v=4)](https://github.com/1stevengrant "1stevengrant (2 commits)")

---

Tags

apilaravelsmssaloonsmseveryone

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/ghijk-smseveryone-sdk/health.svg)

```
[![Health](https://phpackages.com/badges/ghijk-smseveryone-sdk/health.svg)](https://phpackages.com/packages/ghijk-smseveryone-sdk)
```

###  Alternatives

[saloonphp/laravel-plugin

The official Laravel plugin for Saloon

806.6M187](/packages/saloonphp-laravel-plugin)[codebar-ag/laravel-docuware

DocuWare integration with Laravel

1122.7k](/packages/codebar-ag-laravel-docuware)[ardakilic/mutlucell

Mutlucell SMS API wrapper for sending sms text messages for Laravel

457.5k](/packages/ardakilic-mutlucell)[codebar-ag/laravel-zammad

Zammad integration with Laravel

106.7k](/packages/codebar-ag-laravel-zammad)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
