
Research
/Security News
737 Chrome VPN Extensions Linked to Brand Impersonation and Browser Traffic Redirection
The campaign amassed more than 75,000 installs by targeting Russian-speaking users seeking access to blocked services.
@inbin/core
Advanced tools
Official Inbin SDK: typed client for the Inbin REST API (email in, JSON out) plus webhook signature verification.
Official SDK for Inbin — email in, JSON out. Typed client for the REST API plus webhook signature verification. Zero dependencies, Node 18+.
npm i @inbin/core
import { Inbin } from "@inbin/core";
const inbin = new Inbin({ apiKey: process.env.INBIN_API_KEY! });
// 1. Create an inbox — a permanent forwarding address
const inbox = await inbin.inboxes.create({ name: "going-deals" });
console.log(inbox.address); // going-deals-a3f2c8@in.inbin.dev
// 2. Declare what to extract from every email
await inbin.schemas.put({
extract: {
deals: {
type: "array",
items: {
destination_city: { type: "string", required: true },
price_usd: { type: "number", required: true },
},
},
},
hallucination_guard: true,
});
// 3. Point Inbin at your webhook
await inbin.apps.update({ webhook_url: "https://your.app/webhooks/inbin" });
Always verify the HMAC before trusting a delivery. Pass the raw request body — the signature covers the exact bytes Inbin sent.
import { verifyWebhook } from "@inbin/core";
// Next.js route handler
export async function POST(request: Request) {
const raw = await request.text();
const event = verifyWebhook(raw, request.headers, process.env.INBIN_WEBHOOK_SECRET!);
// event.extracted is your schema-shaped JSON
return new Response("ok");
}
// Express
app.post("/webhooks/inbin", express.raw({ type: "*/*" }), (req, res) => {
const event = verifyWebhook(req.body, req.headers, process.env.INBIN_WEBHOOK_SECRET!);
res.sendStatus(200);
});
Throws InbinError (code: "bad_signature") on any mismatch.
| Method | Endpoint |
|---|---|
inbin.inboxes.create({ name? }) | POST /v1/inboxes |
inbin.inboxes.list() | GET /v1/inboxes |
inbin.inboxes.get(id) | GET /v1/inboxes/:id |
inbin.inboxes.rename(id, name) | PATCH /v1/inboxes/:id |
inbin.inboxes.delete(id) | DELETE /v1/inboxes/:id |
inbin.schemas.put({ extract, hallucination_guard? }) | PUT /v1/schemas |
inbin.schemas.current() | GET /v1/schemas/current |
inbin.events.list(params?) | GET /v1/events |
inbin.events.get(id) | GET /v1/events/:id |
inbin.events.redeliver(id) | POST /v1/events/:id/redeliver |
inbin.query(q) | POST /v1/query |
inbin.apps.me() | GET /v1/apps |
inbin.apps.update({ name?, webhook_url? }) | PATCH /v1/apps |
All methods throw InbinError with .status and .code on failure.
Your inbox as a table. Filter, sort, project, flatten array records, group and aggregate over everything your schemas extracted. One request, no database on your side.
const { rows } = await inbin.query({
flatten: "deals",
where: [{ field: "price_usd", op: "lt", value: 300 }],
group_by: "destination_city",
aggregate: [{ fn: "avg", field: "price_usd", as: "avg_price" }],
});
// [{ destination_city: "Lisbon", avg_price: 274.5 }, ...]
Ops: eq, neq, gt, gte, lt, lte, contains, in,
exists. Aggregates: count, sum, avg, min, max. Limit
caps at 200.
Every Inbin application is also an MCP server — see
@inbin/mcp to connect
Claude Desktop, Cursor, or any MCP client to your parsed events.
MIT.
FAQs
Official Inbin SDK: typed client for the Inbin REST API (email in, JSON out) plus webhook signature verification.
We found that @inbin/core demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
The campaign amassed more than 75,000 installs by targeting Russian-speaking users seeking access to blocked services.

Company News
Open source maintainers are under more pressure than ever. We're raising our open source program from the Team plan to the Business plan, free.

Security News
The supply chain control that delays freshly published gems now covers lockfile generation and gem vendoring in Ruby projects.