Introducing Nevo
One inbound layer for your backend — webhooks, emails, and more, 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, emails, and more. One shape for every event. Signature verification, rate limits, replay, 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 forwarded mail — or an AI agent reading the world and replying, Nevo is the same underneath. One inbound layer, one shape, one place to listen.
What’s in v1
- One receiver — wire any number of webhook or email channels to one 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 threading via RFC 5322 headers, so replies land in the original conversation in Gmail, Outlook, Apple Mail. - Dashboard — live events feed, delivery log, channels, endpoints, 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, Slack, and cron channels.
- JS, Go, and Ruby SDKs.
- Thread correlation across channels.
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.