Pay only for messages
sent and received

No uptime charges. No hidden fees. Write better code, pay less.

Free Tier

$0 /month

Perfect for hobbyists and prototypes.

  • 500 messages per day free
  • Unlimited devices
  • Unlimited projects
  • Full dashboard access
  • Community support
Get started free
Most Popular

Pay As You Go

Starting at $5 /month

Includes 5 million messages. $3 per million for additional messages.

  • 5 million messages per month included
  • Unlimited devices
  • Unlimited projects
  • Full dashboard access
  • Email support
Start building

Enterprise

Volume discounts, custom SLA, priority support, and dedicated account management.

Contact sales

What counts as a message?

Simple, predictable billing based on device communication.

From your code to device

  • Asking device to monitor a GPIO pin: 1 message
  • Setting a GPIO pin state: 1 message
  • Requesting sensor data: 1 message
  • Any command sent to device: 1 message

From device to your code

  • GPIO state change notification: 1 message
  • Sensor reading: 1 message
  • Any data sent from device: 1 message

Currently free (pricing TBD)

  • • Logs
  • • KV storage
  • • Metrics and monitoring

We'll announce pricing for these features with plenty of advance notice.

Example costs

See how much your project might cost.

Usage Monthly Cost
500 messages/day Free (under daily limit)
10,000 messages/day ~$0.90/month
100,000 messages/day ~$9/month
1,000,000 messages/day ~$90/month

* Minimum charge of $5/month includes 5 million messages. Additional messages charged at $3 per million.

Write efficient code, save money

Better code means lower costs. Here's how to optimize.

Use time-based monitoring wisely

Check values at appropriate intervals instead of constantly polling.

// Check temperature every 5 minutes instead of every second
await this.env.DEVICE.configureAdcMonitoring(26, {
  interval: 300000 // 5 minutes = ~288 messages/day
});

Use event-based monitoring

Only send messages when values actually change.

// Only notify when GPIO state changes
await this.env.DEVICE.configureGpioInputMonitoring(20, true);
// Messages only sent on actual button presses

Use smart thresholds

Only alert when values cross important thresholds.

// Only send alert when temperature is out of range
if (temp > 30 || temp < 10) {
  await this.sendAlert(temp); // Only when necessary
}

Frequently asked questions

Do I pay for devices that are offline?

No! You only pay when messages are sent or received. Offline devices cost nothing.

What if I go over 500 messages on the free tier?

Any messages past 500 in a day are dropped unless you upgrade.

Can I set spending limits?

Yes! You can set daily and monthly spending limits in the dashboard to avoid surprises.

Do failed messages count?

No, only successfully delivered messages count toward your usage.

Can I get a volume discount?

Yes! Contact us for Enterprise pricing with volume discounts for high-usage applications.

When does the free allowance reset?

Your 500 free daily messages reset at midnight UTC every day.

Start with 500 free messages per day

No credit card required to get started.