Pusher-Compatible API

The Free, Pusher-Compatible Realtime API

Drop-in Pusher alternative — free to use, no per-message billing.

Apinator is API-compatible with Pusher — keep your channels, your auth flow, and your client code. And it is free to use: no per-message billing, no connection tiers, no surprise invoices when traffic spikes. Migrate in minutes.

Pusher-Compatible API

Same channel types, auth flow, and event model as Pusher. Swap the client library — nothing else changes.

No Per-Message Billing

Pusher charges per message and connection. Apinator is free to use, with no metered fees, no peak-connection overage, and no surprise invoices when traffic spikes.

Free Tier Built for Production

Presence, private channels, webhooks, and multi-region are included — not gated behind a paid plan. No credit card required.

Multi-Region (EU + US)

Choose the region for your app — EU or US — so connections stay close to your users and sensitive data stays in its jurisdiction.

Full Feature Parity

Public, private, and presence channels. Client events. Webhooks. HMAC auth. Everything you rely on Pusher for, without the per-unit bill.

Drop-In Migration

Replace pusher-js with @apinator/client and your existing channel code keeps working. Most teams migrate in under 30 minutes.

Apinator vs Pusher

FeatureApinatorPusher
Pricing modelFreePer-message / per-connection
Free-tier connections500100
Free-tier messages / day500,000200,000
Per-message overageNoneYes
Connection overageNoneYes
Private channels
Presence channels
Client events
Webhooks
Multi-regionEnterprise only
EU data residencyAdd-on

Drop-In Migration

Replace pusher-js with @apinator/client — the channel and event API is identical. One import, done.

migration.js
// Before — pusher-js import Pusher from 'pusher-js' const pusher = new Pusher('APP_KEY', { cluster: 'us2' }) const ch = pusher.subscribe('orders') ch.bind('update', (data) => renderOrder(data)) // After — @apinator/client (identical API, fully managed) import { RealtimeClient } from '@apinator/client' const client = new RealtimeClient('APP_KEY', { host: 'wss://rt.apinator.io' }) const ch = client.subscribe('orders') ch.bind('update', (data) => renderOrder(data))

Frequently Asked Questions

Ready to get started?

Completely free, no credit card required. Deploy in minutes.