sms77/api
PHP client for the SMS77 (seven.io) API, letting you send SMS, manage contacts, and integrate messaging into your applications. A lightweight SDK for transactional and bulk texting from PHP and Laravel projects.
Architecture fit. The package is a framework‑agnostic SDK (seven-io/php-client, packaged as sms77/api) exposing the seven.io REST surface — SMS, voice, RCS, WhatsApp, number lookup, and webhooks. It is PSR‑oriented (PSR‑18 HTTP client + PSR‑7/17 messaging), which makes it a clean fit behind a Laravel service rather than inside the framework. It does not ship a Laravel service provider, config publisher, or facade, so it slots naturally into an internal SmsGateway/Notifier abstraction but requires a thin Laravel adapter to feel native.
Integration feasibility. High for a first send: composer require sms77/api, supply an API key from config/services.php/.env, construct the client in a container binding. Effort climbs with the features that actually matter in production — webhook intake, delivery receipt correlation, batch/bulk sends, multi-channel routing (SMS → WhatsApp → RCS fallback), and credential rotation.
Technical risk. The score (~6.2) and adoption signal (13 stars, 0 dependents) are the headline concern: thin community validation means fewer Stack Overflow answers, fewer battle‑tested edge cases, and no downstream ecosystem pressure to keep the API stable. Offsetting this, it is the official vendor client with an MIT license and a recent release cadence (2026‑02‑05), so vendor support and upstream fixes are credible. The residual risk is concentration: SMS is often an OTP/2FA critical path, so a seven.io outage or a breaking major version becomes a user‑facing incident. The package itself is not a Laravel notification channel — pairing it with the seven.io notification channel (if used) adds a second, separately maintained dependency.
Key questions. What volume and channel mix (SMS‑only vs. voice/RCS/WhatsApp) do we actually need? Do we require EU data residency (German vendor is favorable for GDPR)? What is the seven.io SLA and support tier versus enterprise alternatives? Is there a sandbox/test mode to avoid burning credits in CI? What is the vendor's deprecation policy, and who owns the Laravel adapter internally?
Stack fit. Works on modern PHP (7.4+/8.x) with any PSR‑18 client, so it coexists with Laravel's Guzzle stack without conflict. No hard framework coupling means it can be shared across Laravel apps, queue workers, and CLI tools. Laravel 9/10/11 compatibility is a matter of the adapter you write, not the SDK.
Migration path. Do not call the SDK directly from controllers, jobs, or notification classes. Introduce an internal SmsGateway interface (send, status, webhook verify) with a SevenIoGateway implementation, bind it in a service provider, and publish config for key, sender ID, and default channel. This decouples every call site from the vendor and makes the package swappable for Twilio/Vonage without touching business logic.
Compatibility. Verify pinned PHP and PSR versions against the SDK's composer constraints, and confirm the Laravel version matrix once the adapter exists. If you adopt seven.io's Laravel notification channel, test it against your Laravel minor version independently — it is a distinct dependency with its own cadence.
Sequencing. (1) Build the abstraction, config, and container binding; (2) pilot on a non‑critical flow (transactional alerts, not OTP); (3) wire webhook intake and delivery‑receipt correlation with idempotency keys; (4) add retry/backoff and a fallback provider for critical paths; (5) only then cut over OTP/2FA traffic; (6) document runbooks and credential rotation before declaring GA.
Maintenance. Small surface, MIT license, vendor‑driven releases — pin a minor version, watch the changelog for major bumps, and keep the adapter thin so upgrades are contained. The community is thin, so treat the vendor as the primary support channel and budget for reading source rather than docs when behavior is unclear.
Support. Enterprise seven.io plans typically carry SLAs; the open‑source SDK does not. Escalation for delivery failures will route through the vendor's account team, not GitHub issues. Internal ownership of the Laravel adapter must be explicit — it is our code, not theirs.
Scaling. Expect per‑account rate limits and per‑message cost; bulk sends must be queued with backoff and batch endpoints rather than per‑message loops. Webhook ingestion needs a queue, signature verification, and dedupe to survive retries. Multi‑channel fallback (SMS → WhatsApp → RCS) is where seven.io differentiates but also where orchestration complexity lives.
Failure modes. Credential expiry or rotation gaps; rate‑limit 429s under burst; carrier‑level rejections invisible until receipt webhooks land; lost webhooks causing unresolved delivery state; partial batch failures without per‑recipient status; vendor outage on OTP paths. Each needs a defined detection (metrics, dead‑letter queue, alert on receipt lag) and a fallback.
Ramp‑up. Low for a basic send (an afternoon). Moderate for production grade: webhook handling, delivery receipts, idempotency, retries, and multi‑channel routing realistically take 1–2 engineer‑weeks including tests. Because external documentation and community examples are sparse, budget extra time for source reading and write internal docs as you go — that documentation becomes the real onboarding asset.
How can I help you explore Laravel packages today?