Skip to main content

Java SDK

The official Audian SDK for Java.

Installation​

Maven​

Add to your pom.xml:

<dependency>
<groupId>com.audian</groupId>
<artifactId>audian-sdk</artifactId>
<version>1.0.0</version>
</dependency>

Gradle​

Add to your build.gradle:

dependencies {
implementation 'com.audian:audian-sdk:1.0.0'
}

Quick Start​

import com.audian.AudianClient;
import com.audian.models.SearchNumbersRequest;
import com.audian.models.SearchNumbersResponse;

public class Main {
public static void main(String[] args) throws Exception {
AudianClient client = new AudianClient("YOUR_API_KEY");

// Search for phone numbers
SearchNumbersResponse numbers = client.numbers.search(
new SearchNumbersRequest()
.setLocation("US-CA-415")
.setLimit(10)
);

System.out.println("Found " + numbers.getData().getNumbers().size() + " numbers");
}
}

Configuration​

Initialize Client​

import com.audian.AudianClient;
import java.time.Duration;

AudianClient client = new AudianClient.Builder()
.apiKey("sk_live_...")
.baseURL("https://api.audian.com:8443/v2") // Optional
.timeout(Duration.ofSeconds(30)) // Optional
.maxRetries(3) // Optional
.backoffFactor(2) // Optional
.build();

Environment Variables​

export AUDIAN_API_KEY='sk_live_...'
AudianClient client = new AudianClient(System.getenv("AUDIAN_API_KEY"));

Phone Numbers API​

Search Numbers​

import com.audian.models.SearchNumbersRequest;

SearchNumbersResponse response = client.numbers.search(
new SearchNumbersRequest()
.setLocation("US-CA-415")
.setPattern("415*")
.setFeatures(Arrays.asList("sms", "mms"))
.setLimit(20)
.setOffset(0)
);

response.getData().getNumbers().forEach(number ->
System.out.println("Number: " + number.getNumber())
);

List Your Numbers​

import com.audian.models.ListNumbersRequest;

ListNumbersResponse response = client.numbers.list(
new ListNumbersRequest()
.setLimit(20)
.setOffset(0)
.setStatus("active")
);

response.getData().getNumbers().forEach(number ->
System.out.println("Number: " + number.getNumber())
);

Get Number Details​

import com.audian.models.Number;

Number number = client.numbers.get("num_abc123");
System.out.println("Number: " + number.getNumber());

Purchase a Number​

import com.audian.models.PurchaseNumberRequest;

PurchaseNumberResponse purchased = client.numbers.purchase(
new PurchaseNumberRequest()
.setNumber("+14155551234")
.setFriendlyName("Support Line")
);

System.out.println("Purchased: " + purchased.getData().getNumber());

Update Number Configuration​

import com.audian.models.*;

UpdateNumberConfigRequest config = new UpdateNumberConfigRequest()
.setFriendlyName("Support Line")
.setCallForwarding(
new CallForwarding()
.setEnabled(true)
.setForwardTo("+14155559999")
.setRingsBeforeForward(4)
)
.setVoicemail(
new Voicemail()
.setEnabled(true)
.setTranscription(true)
);

UpdateNumberConfigResponse updated = client.numbers.updateConfig("num_abc123", config);

Set Caller ID​

import com.audian.models.SetCallerIdRequest;

SetCallerIdResponse callerId = client.numbers.setCallerId(
"num_abc123",
new SetCallerIdRequest()
.setCallerIdNumber("+14155551234")
.setCallerIdName("Support")
);

Configure E911​

import com.audian.models.SetE911Request;

SetE911Response e911 = client.numbers.setE911(
"num_abc123",
new SetE911Request()
.setAddressLine1("123 Main Street")
.setAddressLine2("Suite 100")
.setCity("San Francisco")
.setState("CA")
.setPostalCode("94102")
.setCountry("US")
.setCustomerName("Acme Corp")
);

SMS API​

Send SMS​

import com.audian.models.SendSMSRequest;

SendSMSResponse response = client.sms.send(
new SendSMSRequest()
.setTo("+14155551234")
.setFrom("+14155559999")
.setMessage("Hello, World!")
);

System.out.println("SMS ID: " + response.getData().getId());

Send Batch SMS​

import com.audian.models.*;

SendBatchSMSResponse response = client.sms.sendBatch(
new SendBatchSMSRequest()
.setMessages(Arrays.asList(
new SMSMessage().setTo("+14155551234").setMessage("Hello 1"),
new SMSMessage().setTo("+14155551235").setMessage("Hello 2"),
new SMSMessage().setTo("+14155551236").setMessage("Hello 3")
))
);

Get SMS Details​

import com.audian.models.SMS;

SMS sms = client.sms.get("sms_abc123");
System.out.println("Status: " + sms.getStatus());

List SMS Messages​

import com.audian.models.ListSMSRequest;

ListSMSResponse messages = client.sms.list(
new ListSMSRequest()
.setLimit(20)
.setOffset(0)
.setStatus("delivered")
);

Voice API​

Make a Call​

import com.audian.models.MakeCallRequest;

MakeCallResponse call = client.voice.makeCall(
new MakeCallRequest()
.setTo("+14155551234")
.setFrom("+14155559999")
.setAction("connect")
.setConnectTo("+14155559999")
);

System.out.println("Call ID: " + call.getData().getId());

Get Call Details​

import com.audian.models.Call;

Call callDetails = client.voice.getCall("call_abc123");
System.out.println("Status: " + callDetails.getStatus());

List Calls​

import com.audian.models.ListCallsRequest;

ListCallsResponse calls = client.voice.listCalls(
new ListCallsRequest()
.setLimit(20)
.setStatus("completed")
);

Billing API​

Get Usage​

import com.audian.models.Usage;

Usage usage = client.billing.usage.get();

System.out.println("SMS Cost: " + usage.getUsage().getSmsMessages().getCost());
System.out.println("Voice Cost: " + usage.getUsage().getVoiceMinutes().getCost());

Get Usage Breakdown​

import com.audian.models.UsageBreakdownRequest;

UsageBreakdownResponse breakdown = client.billing.usage.getBreakdown(
new UsageBreakdownRequest()
.setMetric("sms")
.setGranularity("day")
);

List Invoices​

import com.audian.models.ListInvoicesRequest;

ListInvoicesResponse invoices = client.billing.invoices.list(
new ListInvoicesRequest()
.setStatus("paid")
.setLimit(20)
);

Get Invoice​

import com.audian.models.Invoice;

Invoice invoice = client.billing.invoices.get("inv_abc123");
System.out.println("Total: " + invoice.getTotal());

Download Invoice PDF​

import java.nio.file.Files;
import java.nio.file.Paths;

byte[] pdf = client.billing.invoices.getPdf("inv_abc123");
Files.write(Paths.get("invoice.pdf"), pdf);

Error Handling​

import com.audian.exception.AudianException;

try {
client.numbers.purchase(
new PurchaseNumberRequest()
.setNumber("+14155551234")
);
} catch (AudianException e) {
System.out.println("Error: " + e.getMessage());
System.out.println("Code: " + e.getCode());
System.out.println("HTTP Status: " + e.getHttpStatus());
}

Rate Limiting​

The SDK automatically handles rate limiting with exponential backoff:

// Automatically retries with exponential backoff
SearchNumbersResponse numbers = client.numbers.search(
new SearchNumbersRequest()
.setLocation("US-CA-415")
);

Custom Retry Configuration​

AudianClient client = new AudianClient.Builder()
.apiKey("YOUR_API_KEY")
.maxRetries(5)
.backoffFactor(2)
.initialRetryDelay(100) // milliseconds
.build();

Monitor Rate Limit Headers​

ListNumbersResponse response = client.numbers.list(null);

String limit = response.getHeaders().get("ratelimit-limit");
String remaining = response.getHeaders().get("ratelimit-remaining");
String reset = response.getHeaders().get("ratelimit-reset");

System.out.println("Limit: " + limit + ", Remaining: " + remaining + ", Reset: " + reset);

Webhooks​

Verify Webhook Signature​

import com.audian.webhooks.WebhookVerifier;
import com.audian.models.Event;

WebhookVerifier verifier = new WebhookVerifier("whsec_...");

@PostMapping("/webhook")
public ResponseEntity<?> handleWebhook(
@RequestBody String payload,
@RequestHeader("X-Audian-Signature") String signature
) {
try {
Event event = verifier.verify(payload, signature);
System.out.println("Event type: " + event.getType());
return ResponseEntity.ok().body(new HashMap<String, Boolean>() {{
put("success", true);
}});
} catch (Exception e) {
return ResponseEntity.status(401).body(new HashMap<String, String>() {{
put("error", "Unauthorized");
}});
}
}

Handle Webhook Events​

switch (event.getType()) {
case "sms.received":
SMSReceivedEvent smsEvent = (SMSReceivedEvent) event.getData();
System.out.println("SMS from: " + smsEvent.getFrom());
System.out.println("Message: " + smsEvent.getMessage());
break;

case "call.completed":
CallCompletedEvent callEvent = (CallCompletedEvent) event.getData();
System.out.println("Call duration: " + callEvent.getDuration() + "s");
break;

case "number.ported":
NumberPortedEvent portEvent = (NumberPortedEvent) event.getData();
System.out.println("Number " + portEvent.getNumber() + " ported successfully");
break;
}

Complete Example​

import com.audian.AudianClient;
import com.audian.models.*;
import java.util.List;

public class AudianExample {
public static void main(String[] args) throws Exception {
AudianClient client = new AudianClient(System.getenv("AUDIAN_API_KEY"));

// Search for available numbers
SearchNumbersResponse available = client.numbers.search(
new SearchNumbersRequest()
.setLocation("US-CA-415")
.setLimit(5)
);

List<SearchResult> numbers = available.getData().getNumbers();
System.out.println("Found " + numbers.size() + " numbers");

// Purchase the first number
if (!numbers.isEmpty()) {
String number = numbers.get(0).getNumber();

PurchaseNumberResponse purchased = client.numbers.purchase(
new PurchaseNumberRequest()
.setNumber(number)
.setFriendlyName("Demo Number")
);

System.out.println("Purchased: " + purchased.getData().getNumber());

// Send SMS from the number
SendSMSResponse sms = client.sms.send(
new SendSMSRequest()
.setFrom(purchased.getData().getNumber())
.setTo("+14155559999")
.setMessage("Hello from Audian!")
);

System.out.println("SMS sent: " + sms.getData().getId());
}
}
}

Support​

Version History​

See changelog