Access is invite-only during beta. Once invited, create a key to personalize these examples. Production sending requires a separate review.

Send emails with Rust

Install the Rust crate from GitHub and call emails().send.

emails().send posts to POST /api/v1/emails. Pass team_id on the client. Calls use bearer auth against https://app.postshiba.com.

send.rs
1 use postshiba::Client;
2 use serde_json::json;
3
4 let client = Client::new("YOUR_API_KEY")
5 .team_id("KjkAJW");
6
7 let email = client.emails().send(&json!({
8 "from": "hello@mail.example.com",
9 "to": ["you@example.com"],
10 "subject": "PostShiba test",
11 "text": "hello from PostShiba",
12 "html": "<p>hello from PostShiba</p>"
13 }))?;

Installation

Cargo.toml
1 [dependencies]
2 postshiba = { git = "https://github.com/postshiba/postshiba-rust" }

Not on crates.io yet. Open pull requests on postshiba/sdks.

Send through a cluster with an idempotency key and sandbox mode.

cluster.rs
1 client.emails().send_on_cluster(
2 "NmQpXr",
3 &body,
4 Some("idem-123"),
5 true,
6 )?;

Errors and throttling

Failed responses return Error with error, field, and message.

A 429 with error throttled means the cluster hit its hourly throttle or its 24-hour cap. Do not retry that send immediately. Immediate retries hit the same cap.

The client does not delay for you. In a queued worker, check err.error.as_deref() == Some("throttled") before sending again.

See Errors.

About

PostShiba is the email platform that powers Bento behind the scenes. You can build your own products, like Bento, on top of it.

© 2026 PostShiba by Backpack Internet Pty. Ltd. All rights reserved.

The same policies that govern Bento are applied to PostShiba Privacy | Terms | Security