Zindua for Java
One official package on Maven Central: run.zindua:zindua-sdk v1.0.0. Spring Boot, Quarkus, Micronaut, Jakarta, Maven, or Gradle. Same JAR. No extra Spring starter. Backend only.
One JAR. Every Java backend.
Spring Boot is the common case, not a different product. Maven and Gradle both install this package from Central.
Spring Boot
The usual case. Same artifact: there is no zindua-spring-boot-starter. Register ZinduaClient as a @Bean and inject it.
Maven and Gradle
One coordinate on Maven Central: run.zindua:zindua-sdk. Gradle implementation(...) or a Maven <dependency>. Same JAR.
Any Java backend
Quarkus, Micronaut, Jakarta EE, or a plain Java 17 service. new ZinduaClient(apiKey). Your DI, not a framework plugin.
Not Android or desktop
Keep the API key on the server. Swing, JavaFX, and Android call your backend; your backend calls Zindua.
Server-side only
ZINDUA_API_KEY in env or a secrets manager. Never in Swing, JavaFX, a browser bundle, or an Android APK.
Typed validation
Email, E.164 WhatsApp, and template slugs validated locally before calling the API.
Email + WhatsApp
One send() method for both channels. Same templates as Node, PHP, and .NET.
Java 17 + Central
run.zindua:zindua-sdk on Maven Central. JDK HttpClient + Jackson. No extra HTTP client to add.
Spring included
No second package. One @Bean in Spring Boot. Quarkus or Micronaut construct the same client by hand.
Dashboard logs
Every send() returns a logId. Confirm delivery in Dashboard → Logs before you ship.
Install and send
Pick a use case. The Java snippet updates. Gradle or Maven to first OTP.
implementation("run.zindua:zindua-sdk:1.0.0") # or Maven<dependency> <groupId>run.zindua</groupId> <artifactId>zindua-sdk</artifactId> <version>1.0.0</version></dependency> # .envZINDUA_API_KEY=znd_test_your_key_hereStep by step
Create a Zindua project
Sign up at zindua.run, create a project, copy the API key. Connect email and/or WhatsApp in the dashboard.
Install the SDK
Add run.zindua:zindua-sdk from Maven Central (Gradle or Maven). Same package for Spring Boot and every other Java backend.
Send from Java
new ZinduaClient(System.getenv("ZINDUA_API_KEY")) then send() with a real template slug and variables.
Check the dashboard
send() returns a logId. Open Dashboard → Logs to confirm the email or WhatsApp was queued.
Methods
Parity with @zindua/sdk TypeScript.
| Method | Endpoint | Description |
|---|---|---|
| send() | POST /send | Queue email or WhatsApp message |
| getProject() | GET /project | Project, plan, channel status |
| getTemplates() | GET /templates | Synced slugs, langs, variables |
| getLog() | GET /logs/{id} | Delivery status for a send() logId |
| verifyEmail() | POST /email/verify | Format, MX, disposable check |
| createChallenge() | POST /challenges | PushMirror 1-tap: Web Push, FCM, WhatsApp, BYO |
Integrate with any Java application
Spring Boot, Play Framework, Quarkus, or a plain Main. Same run.zindua:zindua-sdk JAR. No extra starter.
import io.zindua.sdk.ZinduaClient;
import io.zindua.sdk.ZinduaSendOptions;
public class Main {
public static void main(String[] args) {
ZinduaClient zindua = new ZinduaClient(System.getenv("ZINDUA_API_KEY"));
var result = zindua.send(ZinduaSendOptions.builder()
.to("user@example.com")
.template("otp-verification")
.variable("code", "482910")
.build());
System.out.println(result.getLogId());
}
}Spring Boot uses this JAR
No zindua-spring-boot-starter. One @Bean on the server. Android, Swing, and JavaFX call your API.
import io.zindua.sdk.ZinduaClient;
import io.zindua.sdk.ZinduaClientOptions;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
class ZinduaConfig {
@Bean
ZinduaClient zinduaClient() {
return new ZinduaClient(
ZinduaClientOptions.builder()
.apiKey(System.getenv("ZINDUA_API_KEY"))
.build());
}
}// WRONG: never put the project key in Swing, JavaFX, or an APK
// new ZinduaClient("znd_live_...");
// RIGHT: desktop / Android / browser call YOUR backend
POST https://your-api.example/auth/otp
{ "to": "user@example.com" }
// YOUR Spring service holds the key and calls Zindua
zindua.send(ZinduaSendOptions.builder()
.to(req.to())
.template("otp-verification")
.variable("code", code)
.build());Variables
| Variable | Required | Example | Notes |
|---|---|---|---|
| ZINDUA_API_KEY | Yes | znd_test_xxxxxxxxxxxxxxxxxxxxxxxx | Dashboard → Projects. Spring Boot: env or application.yml. |
| ZINDUA_API_BASE_URL | No | https://zindua.run/api/v1 | Optional. The SDK already defaults to this URL. |