SDKs Overview
Zyphr provides official SDKs for 6 platforms, all auto-generated from our OpenAPI specification. Every SDK stays perfectly in sync with the API.
Available SDKs
| Platform | Package | Install | Registry |
|---|---|---|---|
| Node.js / React / React Native | @zyphr-dev/node-sdk | npm install @zyphr-dev/node-sdk | npm |
| MCP Server (AI clients) | @zyphr-dev/mcp-server | npx -y @zyphr-dev/mcp-server | npm |
| Swift (server-side) | ZyphrSDK | See Swift guide | CocoaPods / SPM |
| Kotlin (server-side) | dev.zyphr:zyphr-sdk | See Kotlin guide | Maven Central |
| C# / .NET | ZyphrDev.SDK | dotnet add package ZyphrDev.SDK | NuGet |
| Ruby | zyphr | gem install zyphr | RubyGems |
| Python | zyphr | pip install zyphr | PyPI |
| Go | REST integration | See Go guide | Use Go's net/http package |
| PHP | zyphr/zyphr-php | composer require zyphr/zyphr-php | Packagist |
| React Inbox (Web) | @zyphr-dev/inbox-react | npm install @zyphr-dev/inbox-react | npm |
| React Native Inbox | @zyphr-dev/inbox-react-native | npm install @zyphr-dev/inbox-react-native | npm |
Every SDK above except the client-side inbox packages holds a secret API key
(zy_live_* / zy_test_*) and belongs on a server. A secret key in a mobile app
bundle is extractable from any APK or IPA — a native iOS or Android app should
call your own backend, and your backend calls Zyphr.
The one credential that is safe in a client app is the publishable application
key (za_pub_*) used by ZyphrClient, which covers end-user
auth flows from a browser or React Native app.
SDK Features
All SDKs provide:
- Type Safety - Full type definitions for all requests and responses
- Native HTTP - Uses each platform's native HTTP client (fetch, URLSession, OkHttp, HttpClient, Faraday)
- Auto-Generated - Always in sync with the latest API specification
- Zero Config - Just provide your API key and start sending
Quick Comparison
MCP Server (any AI client)
{
"mcpServers": {
"zyphr": {
"command": "npx",
"args": ["-y", "@zyphr-dev/mcp-server"],
"env": { "ZYPHR_API_KEY": "zy_test_..." }
}
}
}
See the MCP Server guide for the full tool list.
Node.js / TypeScript
import { EmailsApi, Configuration } from '@zyphr-dev/node-sdk';
const config = new Configuration({
apiKey: process.env.ZYPHR_API_KEY,
});
const emails = new EmailsApi(config);
await emails.sendEmail({
sendEmailRequest: {
to: 'user@example.com',
subject: 'Hello',
html: '<p>Hi!</p>',
},
});
Swift (server-side)
import ZyphrSDK
// Server-side only — a secret key must never ship in an iOS bundle.
// See the Swift SDK guide for the backend-proxy shape.
let config = Configuration(apiKey: ProcessInfo.processInfo.environment["ZYPHR_API_KEY"]!)
let emails = EmailsAPI(configuration: config)
try await emails.sendEmail(
sendEmailRequest: SendEmailRequest(
to: "user@example.com",
subject: "Hello",
html: "<p>Hi!</p>"
)
)
Kotlin (server-side)
import dev.zyphr.sdk.api.EmailsApi
import dev.zyphr.sdk.infrastructure.ApiClient
// Server-side only — a secret key must never ship in an APK.
// See the Kotlin SDK guide for the backend-proxy shape.
val client = ApiClient(apiKey = System.getenv("ZYPHR_API_KEY"))
val emails = EmailsApi(client)
emails.sendEmail(
SendEmailRequest(
to = "user@example.com",
subject = "Hello",
html = "<p>Hi!</p>"
)
)
React Inbox (Web)
import { ZyphrProvider, InboxPopover } from '@zyphr-dev/inbox-react';
import '@zyphr-dev/inbox-react/styles.css';
function App() {
return (
<ZyphrProvider subscriberToken={token}>
<InboxPopover />
</ZyphrProvider>
);
}
React Native Inbox
import { ZyphrProvider, InboxPopover } from '@zyphr-dev/inbox-react-native';
function App() {
return (
<ZyphrProvider subscriberToken={token}>
<InboxPopover />
</ZyphrProvider>
);
}
REST API
Don't see your language? The REST API is simple to use directly:
curl -X POST https://api.zyphr.dev/v1/emails \
-H "X-API-Key: zy_live_xxx" \
-H "Content-Type: application/json" \
-d '{"to": "user@example.com", "subject": "Hello", "html": "<p>Hi!</p>"}'
Contributing & Support
Found a bug, want to request a feature, or need a new language SDK? Email support@zyphr.dev — we triage every request and prioritize based on customer demand.