Introducing Nevo
One inbound layer for your backend or AI agent — webhooks, email, Slack, and cron, handled in one place.
Inbound is the quiet time-sink of every backend. You wire up a webhook, then you have to verify its signature. You add another provider, and now you have two signature schemes. Someone wants to also forward emails to the service, so you go find an email provider and another SDK. A delivery fails silently and you realise you never built a retry log. You want to replay the failing delivery after you fix it, and that’s another afternoon gone.
Nevo is that layer, pre-built. One place to receive webhooks, email, Slack, and cron schedules. One shape for every event. Signature verification, rate limits, replay, declarative rules, a dashboard, and two-way replies — all the table-stakes machinery, done once.
What it looks like
Point any provider at your Nevo channel. Forward any mailbox to your Nevo address. Both land on your service as the same event:
from nevo import Nevo
async with Nevo(token=os.environ["NEVO_API_KEY"]) as client:
@client.on_event()
async def handle(event):
if event.type == "email.received":
# respond on the same channel; email threading works automatically
await event.reply(text="Got it.")
elif event.type == "webhook.received":
process_webhook(event.webhook)
await client.run()
That’s the whole surface. Your code cares about event.type and the typed accessor; provider-specific details are in event.data when you need them.
Whether the handler is a traditional service — a worker draining Stripe events, a support tool ingesting a mailbox — or an AI agent that reads and responds, Nevo is the same underneath. One inbound layer, one shape, one place to listen.
What’s in v1
- One receiver — wire webhook, email, Slack, and cron channels to a single project; get one stream to code against.
- SDK streaming and HTTP endpoints — use whichever transport fits your stack; Nevo delivers to either or both.
- Replies —
event.reply(text="…")sends a response on the channel the event arrived on. Email threads back into the original conversation in Gmail, Outlook, Apple Mail. Slack replies post into the same thread. - Declarative rules — filter noise, rewrite fields, or route to specific endpoints before events reach your handler. Dry-run against last week’s traffic before you flip a rule on.
- Dashboard — live events feed, delivery log, channels, endpoints, rules, API keys, billing. Everything operable without touching code.
- Replay — re-deliver any historical event from the dashboard when your code was broken and you’ve fixed it.
- Python SDK —
pip install nevo-sdk. Typed, async, production-hardened: retries,User-Agent, request-id propagation,py.typed, the works.
What’s coming
- Discord and Telegram channels.
- TypeScript and Go SDKs.
Start building
- Quickstart — five minutes to first event.
- Python SDK — the full tour.
app.nevo.sh— sign up, spin up a project.
If the inbound plumbing is eating your week, we’d love to hear from you.