Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
71 changes: 71 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,77 @@ All notable changes to the library will be documented in this file.
The format of the file is based on [Keep a Changelog](http://keepachangelog.com/)
and this library adheres to [Semantic Versioning](http://semver.org/) as mentioned in [README.md][readme] file.

## [ [6.4.0](https://github.com/infobip/infobip-api-java-client/releases/tag/6.4.0) ] - 2026-03-31

⚠️ **IMPORTANT NOTE:** This release contains compile time breaking changes.
All changes, including breaking changes, are addressed and explained in the list bellow.
If you find out that something was not addressed properly, please submit an issue.

### Added
* Support for [Infobip Numbers API](https://www.infobip.com/docs/api/platform/numbers).
* Support for [Infobip Resources API](https://www.infobip.com/docs/api/platform/resources).
* Most recent feature set for:
* [Infobip WhatsApp API](https://www.infobip.com/docs/api/channels/whatsapp).
* [Infobip RCS API](https://www.infobip.com/docs/api/channels/rcs).
* [Infobip Voice API](https://www.infobip.com/docs/api/channels/voice).
* [Infobip Messages API](https://www.infobip.com/docs/api/platform/messages-api).
* [Infobip WebRTC API](https://www.infobip.com/docs/api/channels/webrtc-calls).

### Changed

* **WhatsApp**:
* Added Media Carousel message support with `WhatsAppInteractiveMediaCarouselMessage`, `WhatsAppMediaCarouselCard`, `WhatsAppImageMediaCarouselCardHeader`, `WhatsAppVideoMediaCarouselCardHeader` models
* Added Voice button message support with `WhatsAppInteractiveVoiceButtonMessage` and `WhatsAppInteractiveVoiceButtonContent` models
* Added calling permission support with `WhatsAppCallingPermissionAction`, `WhatsAppCallingPermissionActionLimit`, `WhatsAppCallingPermissionResponse` and `WhatsAppInteractiveCallPermissionRequestMessage` models
* Added outbound event support (typing indicator) with `WhatsAppEvent`, `WhatsAppEventRequest`, `WhatsAppEventOptions`, `WhatsAppOutboundEventTypingIndicatorContent` models
* Added Meta conversion tracking support with `WhatsAppMetaConversionModel`, `WhatsAppMetaConversionType`, `WhatsAppWABAConversionEventRequest`, `WhatsAppConversionDetails` models
* Added marketing update notification support with `WhatsAppWebhookMarketingUpdateNotification` and `WhatsAppWebhookMarketingUpdateNotificationResponse` models
* Added message scheduling support with `WhatsAppRequestSchedulingSettings` model
* Added `WhatsAppTemplateVoiceCallButtonContent` model for voice call template button support
* Added `WhatsAppMessageStatus`, `WhatsAppMessageGeneralStatus`, `WhatsAppSenderPublicKeyResponse`, `WhatsAppShareWabaRequest`, `WhatsAppToDestination` models
* Extended `WhatsAppTemplateButtonContent` with voice call button type support
* Extended `WhatsAppPayment` with additional fields
* Extended `WhatsAppTemplateApiResponse` and `WhatsAppVoiceCallButtonApiData` with new fields
* JavaDoc fixes
* **RCS**:
* Removed `RcsPlatformInfo` class (see [Removed](#removed) section)
* Added conversation started event support with `RcsConversationStartedEvent`, `RcsConversationStartedEvents`, `RcsConversationStartedInfo`, `RcsConversationStartedEventContent`, `RcsConversationInfo` models
* Added `RcsConversationType`, `RcsConversationStartedEventType`, `RcsTrafficType`, `RcsMessagePrice`, `RcsMessageInteractionType`, `RcsEventInteractionType` models
* Updated `RcsWebhookDeliveryReport` model
* JavaDoc fixes
* **Voice**:
* Renamed `CallsSipTrunkRegisteredResetPasswordResponse` to `CallsSipTrunkResetPasswordResponse` to better reflect the return type of the reset password endpoint
* Added CNAM support with `CallsCnam`, `CallsCnamDelivery`, `CallsCnamDeliveryStatus`, `CallsCnamStorage`, `CallsCnamStorageStatus`, `CallsPublicCnamStatus` models
* Added emergency address support with `CallsEmergencyAddress`, `CallsEmergencyAddressStatus`, `CallsValidateAddressResponse` models
* Added TTY play content support with `CallsPlayTty`, `CallsPlayTtyOptions`, `CallsTtyPlayContent` models
* Added `CallsAddress`, `CallsDirection` models
* Extended `CallsLanguage` and `CallsSynthesisVoice` with new language and voice options
* Extended `CallsDialogPlayRequest` with new fields
* Extended `CallsUrlPlayContent` with new fields
* JavaDoc fixes
* **MessagesApi**:
* Added outbound seen event support with `MessagesApiOutboundSeenEvent` and `MessagesApiOutboundSeenEventChannel` models
* Added outbound typing event channel support with `MessagesApiOutboundTypingStartedEventChannel` and `MessagesApiOutboundTypingStoppedEventChannel` models
* Added `MessagesApiInboundTypingStartedChannel` model
* Extended `MessagesApiOutboundEventType` with new event type values
* Updated `MessagesApiInboundDlrChannel`, `MessagesApiInboundTypingStartedEvent`, `MessagesApiInboundTypingStoppedEvent`, `MessagesApiOutboundTypingStartedEvent`, `MessagesApiOutboundTypingStoppedEvent` models
* Extended `MessagesApiOutboundEvent` with new fields
* JavaDoc fixes
* **WebRtc**:
* Added machine detection support with `WebRtcMachineDetection` and `WebRtcMachineDetectionResult` models
* Extended `WebRtcPhoneCallDetails` and `WebRtcPhoneDestination` with new fields
* Updated `WebRtcHangupSource` enum
* JavaDoc fixes
* **Viber**:
* Extended `ViberOtpTemplateLanguage` with new language options
* Extended `ViberOutboundOtpTemplateContent` with new fields
* JavaDoc fixes
* **General**:
* Updated tests

### Removed
- Removed `RcsPlatformInfo` class — its `applicationId` and `entityId` fields are now carried by the existing `Platform` class, which is used consistently across the SDK for platform context

## [ [6.3.0](https://github.com/infobip/infobip-api-java-client/releases/tag/6.3.0) ] - 2026-02-17

⚠️ **IMPORTANT NOTE:** This release contains compile time breaking changes.
Expand Down
26 changes: 11 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ The current version of this library includes this subset of Infobip products:
* [Messages API](https://www.infobip.com/docs/api/platform/messages-api)
* [Moments API](https://www.infobip.com/docs/api/customer-engagement/moments)
* [RCS](https://www.infobip.com/docs/api/channels/rcs)
* [Numbers](https://www.infobip.com/docs/api/platform/numbers)
* [Resources](https://www.infobip.com/docs/api/platform/resources)

## General Info
For `infobip-api-java-client` versioning we use [Semantic Versioning][semver] scheme.
Expand All @@ -50,7 +52,7 @@ Simply add the following in your project's POM file under `dependencies` tag:
<dependency>
<groupId>com.infobip</groupId>
<artifactId>infobip-api-java-client</artifactId>
<version>6.3.0</version>
<version>6.4.0</version>
</dependency>
```

Expand Down Expand Up @@ -200,37 +202,31 @@ Example of webhook implementation with Spring Web framework:
}
```
#### Two-Factor Authentication (2FA)
For the 2FA quick start guide, view [these examples](two-factor-authentication.md).
For 2FA quick start guide, view [these examples](two-factor-authentication.md).

#### Email
For the Email quick start guide, view [these examples](email.md).
For Email quick start guide, view [these examples](email.md).

#### WhatsApp
For the WhatsApp quick start guide, view [these examples](whatsapp.md).
For WhatsApp quick start guide, view [these examples](whatsapp.md).

#### Messages API
For the Messages API quick start guide, view [these examples](messages-api.md).
For Messages API quick start guide, view [these examples](messages-api.md).

#### Moments
For the Moments quick start guide, view [these examples](moments.md).

## Versioning

This project follows a pragmatic Semantic Versioning approach.
For full details on how versions are managed, please see our [Versioning guide][versioning].
For Moments quick start guide, view [these examples](moments.md).

## Ask for help

Feel free to open an issue on the repository if you see any problem or want to request a feature. For pull requests, go to the `CONTRIBUTING` [file][contributing] related to it. This code is auto generated, and we are unable to merge any pull requests form here.
Feel free to open issues on the repository for any encountered problem or feature request. For pull requests, go to the `CONTRIBUTING` [file][contributing] related to it. This code is auto generated, and we are unable to merge any pull requests form here.

This code is auto generated, and we are unable to merge any pull request from here, but we will review and implement changes directly within our pipeline, as described in the `CONTRIBUTING` [file][contributing].

For anything that requires our immediate attention, contact us @ [support@infobip.com](mailto:support@infobip.com).
For anything that requires our imminent attention, contact us @ [support@infobip.com](mailto:support@infobip.com).

[apidocs]: https://www.infobip.com/docs/api
[freetrial]: https://www.infobip.com/docs/essentials/getting-started/free-trial
[signup]: https://www.infobip.com/signup
[semver]: https://semver.org
[license]: LICENSE
[contributing]: CONTRIBUTING.md
[versioning]: VERSIONING.md
[contributing]: CONTRIBUTING.md
2 changes: 1 addition & 1 deletion email.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ Fields `from`, `to`, and `subject` are required. The message must also contain a
Keep in mind the following restrictions while using a trial account:

- you can only send messages to verified email addresses,
- you can only use your email address with the Infobip test domain in the following form: `YourUserName@selfserviceib.com`
- you can only use your email address with the Infobip test domain in the following form: `YourUserName@selfserve.worlds-connected.co`

---

Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

<groupId>com.infobip</groupId>
<artifactId>infobip-api-java-client</artifactId>
<version>6.3.0</version>
<version>6.4.0</version>
<packaging>jar</packaging>

<name>infobip-api-java-client</name>
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/infobip/RequestFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
*/
final class RequestFactory {

private static final String USER_AGENT_HEADER_VALUE = "infobip-api-client-java/6.3.0";
private static final String USER_AGENT_HEADER_VALUE = "infobip-api-client-java/6.4.0";

private final ApiKey apiKey;
private final BaseUrl baseUrl;
Expand Down
16 changes: 8 additions & 8 deletions src/main/java/com/infobip/api/CallsApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,8 @@
import com.infobip.model.CallsRescheduleRequest;
import com.infobip.model.CallsSayRequest;
import com.infobip.model.CallsSipTrunkPage;
import com.infobip.model.CallsSipTrunkRegistrationCredentials;
import com.infobip.model.CallsSipTrunkRequest;
import com.infobip.model.CallsSipTrunkResetPasswordResponse;
import com.infobip.model.CallsSipTrunkResponse;
import com.infobip.model.CallsSipTrunkServiceAddressPage;
import com.infobip.model.CallsSipTrunkStatusRequest;
Expand Down Expand Up @@ -7746,14 +7746,14 @@ private ResetSipTrunkPasswordRequest(String sipTrunkId) {
/**
* Executes the resetSipTrunkPassword request.
*
* @return CallsSipTrunkRegistrationCredentials The deserialized response.
* @return CallsSipTrunkResetPasswordResponse The deserialized response.
* @throws ApiException If the API call fails or an error occurs during the request or response processing.
*/
public CallsSipTrunkRegistrationCredentials execute() throws ApiException {
public CallsSipTrunkResetPasswordResponse execute() throws ApiException {
RequestDefinition resetSipTrunkPasswordDefinition = resetSipTrunkPasswordDefinition(sipTrunkId);
return apiClient.execute(
resetSipTrunkPasswordDefinition,
new TypeReference<CallsSipTrunkRegistrationCredentials>() {}.getType());
new TypeReference<CallsSipTrunkResetPasswordResponse>() {}.getType());
}

/**
Expand All @@ -7762,21 +7762,21 @@ public CallsSipTrunkRegistrationCredentials execute() throws ApiException {
* @param callback The {@link ApiCallback} to be invoked.
* @return The {@link okhttp3.Call} associated with the API request.
*/
public okhttp3.Call executeAsync(ApiCallback<CallsSipTrunkRegistrationCredentials> callback) {
public okhttp3.Call executeAsync(ApiCallback<CallsSipTrunkResetPasswordResponse> callback) {
RequestDefinition resetSipTrunkPasswordDefinition = resetSipTrunkPasswordDefinition(sipTrunkId);
return apiClient.executeAsync(
resetSipTrunkPasswordDefinition,
new TypeReference<CallsSipTrunkRegistrationCredentials>() {}.getType(),
new TypeReference<CallsSipTrunkResetPasswordResponse>() {}.getType(),
callback);
}
}

/**
* Reset registered SIP trunk password.
* Reset SIP trunk credentials.
* <p>
* Reset password. Applicable only for &#x60;REGISTERED&#x60; SIP trunks.
*
* @param sipTrunkId Sip Trunk ID. (required)
* @param sipTrunkId SIP trunk ID. (required)
* @return ResetSipTrunkPasswordRequest
*/
public ResetSipTrunkPasswordRequest resetSipTrunkPassword(String sipTrunkId) {
Expand Down
42 changes: 39 additions & 3 deletions src/main/java/com/infobip/api/EmailApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -1949,7 +1949,9 @@ private RequestDefinition sendEmailDefinition(
String applicationId,
String entityId,
String headers,
String ipPoolId) {
String ipPoolId,
Boolean skipPassiveStorage,
Boolean skipActiveStorage) {
RequestDefinition.Builder builder = RequestDefinition.builder("POST", "/email/3/send")
.requiresAuthentication(true)
.accept("application/json")
Expand Down Expand Up @@ -2060,6 +2062,12 @@ private RequestDefinition sendEmailDefinition(
if (ipPoolId != null) {
builder.addFormParameter(new Parameter("ipPoolId", ipPoolId));
}
if (skipPassiveStorage != null) {
builder.addFormParameter(new Parameter("skipPassiveStorage", skipPassiveStorage));
}
if (skipActiveStorage != null) {
builder.addFormParameter(new Parameter("skipActiveStorage", skipActiveStorage));
}
return builder.build();
}

Expand Down Expand Up @@ -2102,6 +2110,8 @@ public class SendEmailRequest {
private String entityId;
private String headers;
private String ipPoolId;
private Boolean skipPassiveStorage;
private Boolean skipActiveStorage;

private SendEmailRequest(List<String> to) {
this.to = Objects.requireNonNull(to, "The required parameter 'to' is missing.");
Expand Down Expand Up @@ -2481,6 +2491,28 @@ public SendEmailRequest ipPoolId(String ipPoolId) {
return this;
}

/**
* Sets skipPassiveStorage.
*
* @param skipPassiveStorage Set to true to skip [passive email storage](https://www.infobip.com/docs/email/email-storage-and-retrieval/passive-email-storage) (long-term storage used for compliance, legal, or audit purposes). If &#x60;false&#x60; or not set, the account-level setting is used. (optional)
* @return SendEmailRequest
*/
public SendEmailRequest skipPassiveStorage(Boolean skipPassiveStorage) {
this.skipPassiveStorage = skipPassiveStorage;
return this;
}

/**
* Sets skipActiveStorage.
*
* @param skipActiveStorage Set to true to skip [active email storage](https://www.infobip.com/docs/email/email-storage-and-retrieval/active-email-storage) (short-term storage used for troubleshooting or support). If &#x60;false&#x60; or not set, the account-level setting is used. (optional)
* @return SendEmailRequest
*/
public SendEmailRequest skipActiveStorage(Boolean skipActiveStorage) {
this.skipActiveStorage = skipActiveStorage;
return this;
}

/**
* Executes the sendEmail request.
*
Expand Down Expand Up @@ -2523,7 +2555,9 @@ public EmailSendResponse execute() throws ApiException {
applicationId,
entityId,
headers,
ipPoolId);
ipPoolId,
skipPassiveStorage,
skipActiveStorage);
return apiClient.execute(sendEmailDefinition, new TypeReference<EmailSendResponse>() {}.getType());
}

Expand Down Expand Up @@ -2569,7 +2603,9 @@ public okhttp3.Call executeAsync(ApiCallback<EmailSendResponse> callback) {
applicationId,
entityId,
headers,
ipPoolId);
ipPoolId,
skipPassiveStorage,
skipActiveStorage);
return apiClient.executeAsync(
sendEmailDefinition, new TypeReference<EmailSendResponse>() {}.getType(), callback);
}
Expand Down
Loading
Loading