Returns Client
The Returns client provides access to return management operations in the fulfillmenttools platform. Handle and track product returns through your fulfillment network.
Basic Usage
import de.joesst.dev.fulfillmenttools.id.ReturnId;
import de.joesst.dev.fulfillmenttools.returns.Return;
import de.joesst.dev.fulfillmenttools.NotFoundException;
import de.joesst.dev.fulfillmenttools.FulfillmenttoolsException;
// Get a return by ID
try {
Return returnJob = client.returns().get(ReturnId.builder().value("ret-001").build());
System.out.println("Status: " + returnJob.status());
System.out.println("Short ID: " + returnJob.shortId());
} catch (NotFoundException e) {
System.out.println("Return not found");
} catch (FulfillmenttoolsException e) {
System.out.println("Request failed: " + e.getMessage());
}Listing Returns
List returns with pagination:
import de.joesst.dev.fulfillmenttools.model.Page;
import de.joesst.dev.fulfillmenttools.returns.ReturnListRequest;
Page<Return> page = client.returns().list(
ReturnListRequest.builder()
.size(50)
.build()
);
for (Return returnJob : page.items()) {
System.out.println(returnJob.id().value() + " — " + returnJob.status());
}Iterate through all pages automatically:
Iterable<Return> allReturns = client.returns().listAll(
ReturnListRequest.builder()
.size(100)
.build()
);
for (Return returnJob : allReturns) {
System.out.println(returnJob.id().value());
}Manual pagination using nextCursor():
Page<Return> page = client.returns().list(ReturnListRequest.builder().size(20).build());
while (page.hasMore()) {
page = client.returns().list(
ReturnListRequest.builder()
.size(20)
.startAfterId(page.nextCursor())
.build()
);
for (Return returnJob : page.items()) {
System.out.println(returnJob.id().value());
}
}Filtering Returns
ReturnListRequest supports several optional filters. Note that the facility filter field is facilityId, not facilityRef:
import de.joesst.dev.fulfillmenttools.id.FacilityId;
import java.util.List;
// Filter by facility and job status
Page<Return> openReturns = client.returns().list(
ReturnListRequest.builder()
.facilityId(FacilityId.builder().value("fac-001").build())
.itemReturnJobStatus(List.of("OPEN", "IN_PROGRESS"))
.size(50)
.build()
);
// Filter by item-level return status
Page<Return> returns = client.returns().list(
ReturnListRequest.builder()
.itemReturnStatus(List.of("RETURNED"))
.size(50)
.build()
);
// Text search
Page<Return> searchResults = client.returns().list(
ReturnListRequest.builder()
.searchTerm("order-123")
.size(20)
.build()
);Creating a Return
originFacilityRefs and status are required fields:
import de.joesst.dev.fulfillmenttools.returns.CreateReturnRequest;
import de.joesst.dev.fulfillmenttools.id.FacilityId;
import java.util.List;
Return created = client.returns().create(
CreateReturnRequest.builder()
.originFacilityRefs(List.of(FacilityId.builder().value("fac-001").build()))
.status("OPEN")
.build()
);
System.out.println("Created return: " + created.id().value());State Transitions
Returns move through a workflow lifecycle. Each transition requires the current version for optimistic locking. Transitions are mutually exclusive — always use the version from the most recent state of the return:
Return returnJob = client.returns().get(ReturnId.builder().value("ret-001").build());
ReturnId id = returnJob.id();
int version = returnJob.version();
// Start processing the return
Return started = client.returns().start(id, version);
// Finish the return (uses the version returned by start())
Return finished = client.returns().finish(id, started.version());Other available transitions (each called independently with the current version):
// Restart a return that was previously finished or in progress
Return restarted = client.returns().restart(id, version);Async Usage
All methods have async variants returning CompletableFuture:
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
CompletableFuture<Return> future = client.returns().getAsync(
ReturnId.builder().value("ret-001").build()
);
future.whenComplete((returnJob, ex) -> {
if (ex != null) {
Throwable cause = ex instanceof CompletionException && ex.getCause() != null
? ex.getCause() : ex;
System.out.println("Error: " + cause.getMessage());
} else {
System.out.println("Status: " + returnJob.status());
}
});API Reference
get(ReturnId)
Get a return by ID.
Parameters:
returnId: ReturnId— The return identifier
Returns: Return
Throws: NotFoundException (404), FulfillmenttoolsException if the request fails
getAsync(ReturnId)
Get a return by ID asynchronously.
Parameters:
returnId: ReturnId— The return identifier
Returns: CompletableFuture<Return>
list(ReturnListRequest)
List returns with pagination.
Parameters:
request: ReturnListRequest— List request with filter and pagination parameters
Returns: Page<Return>
Throws: FulfillmenttoolsException if the request fails
listAsync(ReturnListRequest)
List returns asynchronously.
Parameters:
request: ReturnListRequest— List request
Returns: CompletableFuture<Page<Return>>
listAll(ReturnListRequest)
List all returns, automatically iterating through pages.
Parameters:
request: ReturnListRequest— List request
Returns: Iterable<Return>
create(CreateReturnRequest)
Create a new return. originFacilityRefs and status are required.
Parameters:
request: CreateReturnRequest— Create return request
Returns: Return
Throws: FulfillmenttoolsException if the request fails
createAsync(CreateReturnRequest)
Create a new return asynchronously.
Parameters:
request: CreateReturnRequest— Create return request
Returns: CompletableFuture<Return>
start(ReturnId, int)
Start a return process.
Parameters:
returnId: ReturnId— The return identifierversion: int— Current version for optimistic locking
Returns: Return
Throws: FulfillmenttoolsException if the request fails or a version conflict occurs
startAsync(ReturnId, int)
Start a return process asynchronously.
Parameters:
returnId: ReturnId— The return identifierversion: int— Current version for optimistic locking
Returns: CompletableFuture<Return>
finish(ReturnId, int)
Finish a return process.
Parameters:
returnId: ReturnId— The return identifierversion: int— Current version for optimistic locking
Returns: Return
Throws: FulfillmenttoolsException if the request fails or a version conflict occurs
finishAsync(ReturnId, int)
Finish a return process asynchronously.
Parameters:
returnId: ReturnId— The return identifierversion: int— Current version for optimistic locking
Returns: CompletableFuture<Return>
restart(ReturnId, int)
Restart a return process.
Parameters:
returnId: ReturnId— The return identifierversion: int— Current version for optimistic locking
Returns: Return
Throws: FulfillmenttoolsException if the request fails or a version conflict occurs
restartAsync(ReturnId, int)
Restart a return process asynchronously.
Parameters:
returnId: ReturnId— The return identifierversion: int— Current version for optimistic locking
Returns: CompletableFuture<Return>