Zindua

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.

implementation("run.zindua:zindua-sdk:1.0.0")
Maven XML
Who it's for

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.

Quick start

Install and send

Pick a use case. The Java snippet updates. Gradle or Maven to first OTP.

build.gradle.kts
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_here
Setup

Step by step

01

Create a Zindua project

Sign up at zindua.run, create a project, copy the API key. Connect email and/or WhatsApp in the dashboard.

02

Install the SDK

Add run.zindua:zindua-sdk from Maven Central (Gradle or Maven). Same package for Spring Boot and every other Java backend.

03

Send from Java

new ZinduaClient(System.getenv("ZINDUA_API_KEY")) then send() with a real template slug and variables.

04

Check the dashboard

send() returns a logId. Open Dashboard → Logs to confirm the email or WhatsApp was queued.

API

Methods

Parity with @zindua/sdk TypeScript.

MethodEndpointDescription
send()POST /sendQueue email or WhatsApp message
getProject()GET /projectProject, plan, channel status
getTemplates()GET /templatesSynced slugs, langs, variables
getLog()GET /logs/{id}Delivery status for a send() logId
verifyEmail()POST /email/verifyFormat, MX, disposable check
createChallenge()POST /challengesPushMirror 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.

Main.java
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());
  }
}
Integrations

Spring Boot uses this JAR

No zindua-spring-boot-starter. One @Bean on the server. Android, Swing, and JavaFX call your API.

ZinduaConfig.java
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());
  }
}
YourBackend.java
// 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());
Environment

Variables

VariableRequiredExampleNotes
ZINDUA_API_KEYYesznd_test_xxxxxxxxxxxxxxxxxxxxxxxxDashboard → Projects. Spring Boot: env or application.yml.
ZINDUA_API_BASE_URLNohttps://zindua.run/api/v1Optional. The SDK already defaults to this URL.

Need another stack?

Same templates and logs across Node, PHP, Python, .NET, and Java.