The road to API Alerts 2.0
May 29, 2026
This page is updated as each release ships. Bookmark it to follow along.
API Alerts 2.0 is in open beta - live now, and you can opt in today. It’s a big one. Rather than holding everything back for a single drop, we rolled out the foundation in waves so each piece could land, settle, and get used in production before the next one shipped.
The short version of what 2.0 brings is in the 2026 preview: event routing, Slack, Discord, email, SMS, WhatsApp, webhooks, all from the same POST /event call you already use. To turn it on, see Beta & Early Access.
This page covers the work as it lands.
✅ Shipped
Go SDK v1.2.0. Rebuilt around a global singleton (Configure once, Send anywhere), a 30-second HTTP timeout, full Event field parity (message, channel, event, title, tags, link, data), and a constants test that pins the integration name, base URL, and SemVer major. Same package, cleaner surface.
go get github.com/apialerts/apialerts-go
API Alerts CLI v1.3.2. A single Go binary that talks to the same API your SDKs do, shipped through eight install channels: Homebrew, Scoop, winget (coming soon), apt, dnf, npm (npx @apialerts/cli), go install, and a raw tarball on the releases page. Built-in flags for --json output, --debug, and per-call --key overrides. Designed to drop into shell scripts, cron jobs, CI pipelines, and AI agents without a config file.
brew install apialerts/tap/apialerts
apialerts send -e ci.deploy.success -m "Deploy complete" -c releases
notify-action v2.2.0. The GitHub Action is aligned to the 2.0 event model: the event input is your routing key, matched with Unix glob/fnmatch (ci.deploy.success hits ci.*), with title and data for richer events and destination templating on top of the existing message, channel, tags, and link. Authenticate with the api_key input or set APIALERTS_API_KEY once at the job or workflow level. Pin to @v2 for the latest 2.x, or an exact tag like @v2.2.0.
- uses: apialerts/notify-action@v2
with:
event: ci.deploy.success
message: "Deployment successful"
(set APIALERTS_API_KEY once at the job/workflow level)
JS SDK v1.3.2. Aligned to the Go SDK’s surface and quality bar. Singleton API, 30-second timeout, full Event field parity, and a per-call apiKey override for multi-workspace use. The npm package was also renamed from apialerts-js to apialerts; the old package has been deprecated.
npm install apialerts
Python SDK v1.2.0. Same alignment. Singleton, 30-second timeout, stdlib logging everywhere (no stray print() calls), per-call api_key override. Same apialerts package on PyPI as before.
pip install apialerts
Kotlin SDK v1.2.0. A full Kotlin Multiplatform launch - one codebase across JVM, Android, iOS, macOS, Linux, Windows, and Node.js - on the same parity bar, with an injectable ApiAlertsClient for dependency injection (Koin, Hilt, Spring) alongside the singleton. The same artifact powers the Java SDK through JVM interop (no separate package), with a Java-friendly surface: EventBuilder, a CompletableFuture bridge, and an injectable client for Spring.
implementation("com.apialerts:client:1.2.0")
C# / .NET SDK v1.1.0. Same alignment, multi-targeting netstandard2.0 and net10.0 so it runs on .NET, .NET Framework, Mono, Unity (2018+, Mono and IL2CPP), and Godot C# projects, with an injectable IApiAlertsClient (services.AddApiAlerts(...)) alongside the singleton.
dotnet add package apialerts
Swift SDK v1.2.0. Same alignment, async/await throughout, with a constructable ApiAlertsClient behind ApiAlertsClientProtocol for dependency injection and mocking alongside the singleton. Injectable URLSession for testability, os.Logger instead of print. Runs on iOS, macOS, watchOS, tvOS, and visionOS via Swift Package Manager.
.package(url: "https://github.com/apialerts/apialerts-swift", exact: "1.2.0")
Rust SDK v1.1.0. Same parity bar, async via Tokio. Instance-based by design (a constructable ApiAlertsClient rather than a global singleton, which would be unidiomatic in Rust), 30-second timeout, full Event field parity, and a constants test pinning the integration name, base URL, and SemVer major. On crates.io as apialerts.
apialerts = "1.1.0"
PHP SDK v1.0.0. Same alignment, HTTP via Guzzle. Singleton API, 30-second timeout, full Event field parity, a per-call apiKey override for multi-workspace use, and a constructable Client behind ApiAlertsClientInterface for dependency injection and mocking (bind it in your Laravel or Symfony container). On Packagist as apialerts/apialerts.
composer require apialerts/apialerts
Dart SDK v1.0.0. Same alignment for Flutter apps and Dart backends. Singleton API, 30-second timeout, full Event field parity, a per-call apiKey override for multi-workspace use, and a constructable ApiAlertsClient for dependency injection and mocking. On pub.dev as apialerts.
dart pub add apialerts
Ruby SDK v1.0.0. Same alignment for Rails apps, Sinatra, Sidekiq workers, and scripts. Singleton API, 30-second timeout, full Event field parity, a per-call api_key override for multi-workspace use, and a constructable ApiAlerts::Client for dependency injection and mocking. No third-party runtime dependencies. On RubyGems as apialerts.
gem install apialerts
Godot SDK v1.0.0. Same alignment for Godot 4 games and tools: a GDScript autoload (APIAlerts) you configure once and send from anywhere, typed ApiAlertsEvent / ApiAlertsSendResult, a 30-second timeout, and full Event field parity. No external dependencies, built on Godot’s own HTTPRequest. On the Godot Asset Store.
APIAlerts.configure("your-api-key")
APIAlerts.send(ApiAlertsEvent.new("Player reached level 10"))
Every SDK in the lineup is now on the same quality floor.
Notes on conventions
You’ll notice every example on this page now leads with an event: field using dotted notation (ci.deploy.success, payment.failed, user.signup). This isn’t cosmetic - it’s the convention 2.0 routing rules will key off.
messageis still the only required field. The platform happily accepts events with just a message, as it always has.eventis optional but recommended. It’s how routing rules in 2.0 decide which destinations an event fans out to. Dotted names likeci.deploy.successorpayment.failedare the recommended style, but they’re not required - matching uses Unix glob (fnmatch), so free-form keys with spaces work too. A single rule can matchci.*for all CI events,*.failedfor all failures, orUser *forUser SignupandUser Login.- Code you ship today using this convention is automatically pre-configured for 2.0 routing. You won’t need to retrofit event names into existing integration code when routing lands.
Everywhere across the docs, blog posts, and SDK references, examples now follow this shape. The convention is documented in the GitHub Actions docs and every SDK doc.
🚀 API 2.0
The platform release, now in open beta. The shape of it is no secret - it’s all in the 2026 preview: event routing, multi-destination delivery (Slack, Discord, email, SMS, WhatsApp, webhooks), and no SDK changes required. Anyone can opt in today.
What’s still to come is the public face of it: a repositioned homepage and offering built around routing alerts to wherever your team works, not just the mobile app. The platform underneath is already running - GA is mostly about telling that story.
This page updates as each tick-box flips. Follow along here, watch GitHub for per-SDK releases as they ship, or check Beta & Early Access for the live state of every feature.