Rutas
Una ruta describe un corredor por el que tu compañía está configurada para enviar — el
tipo de pago que usa, la tasa cotizada para ese
corredor, su esquema de comisiones y los límites vigentes en este momento.
RoutesClient expone un único endpoint de lectura que lista lo disponible hoy.
Accede directamente en RetornaClient o a través de client.routes() — las dos
formas ejecutan el mismo código.
getRoutes() / getRoutes(sourceCurrency)
Lista las rutas configuradas para la compañía autenticada.
Firma
public RoutesResponse getRoutes()
public RoutesResponse getRoutes(String sourceCurrency)
La sobrecarga sin argumentos equivale a llamar a la otra con sourceCurrency = null,
que cae en la moneda de origen default del backend, USDR.
Parámetros
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
sourceCurrency | String | No | Moneda desde la que se cotizan las rutas. Null cae en el default del backend (USDR). |
Retorno
RoutesResponse:
| Accesor | Tipo | Significado |
|---|---|---|
routes() | List<Route> | Rutas configuradas. El campo en el wire es routes, no data. |
Cada Route:
| Accesor | Tipo | Significado |
|---|---|---|
name() | String | Nombre de la ruta. |
method() | String | Método de pago de esta ruta (por ejemplo "BANK_TRANSFER"). Se guarda como string para que un método nuevo no rompa la deserialización. |
country() | String | País de destino, ISO 3166-1 alpha-2. |
currency() | String | Moneda de destino. |
rate() | String | Tasa de cambio cotizada para la ruta, como decimal string (p. ej. "852.79") — igual que el resto de los montos en el wire. Es indicativa, viene de la configuración del corredor, no es un monto de dinero liquidado. |
fees() | List<RouteFee> | Esquema de comisiones; vacío cuando no aplica ninguna. Cada RouteFee tiene pricingRule(), pricingType(), percentageValue() (double), flatValue() (double), pricingLabel() — todos en camelCase también en el wire, a diferencia del resto de este envelope. |
limits() | RouteLimits | Ver abajo. |
RouteLimits:
| Accesor | Tipo | Significado |
|---|---|---|
perTransaction() | PerTransactionLimit | min()/max(), strings decimales, límites por transacción. |
transaction() | TransactionWindows | Ventanas basadas en cantidad: daily(), weekly(), monthly(), cada una un TransactionWindow con max(), current(), remaining() (todos int). |
fund() | FundWindows | Ventanas basadas en valor: daily(), weekly(), monthly(), cada una un FundWindow con max(), current(), remaining() (todos strings decimales). |
Ejemplo
import app.retorna.sdk.RetornaClient;
import app.retorna.sdk.RetornaClientBuilder;
import app.retorna.sdk.core.environment.RetornaEnvironment;
import app.retorna.sdk.models.route.Route;
import app.retorna.sdk.models.route.RoutesResponse;
RetornaClient client = new RetornaClientBuilder()
.environment(RetornaEnvironment.SANDBOX)
.clientId(System.getenv("RETORNA_CLIENT_ID"))
.clientSecret(System.getenv("RETORNA_CLIENT_SECRET"))
.privateKey(System.getenv("RETORNA_PRIVATE_KEY"))
.buildClient();
RoutesResponse routes = client.getRoutes("USDR");
for (Route route : routes.routes()) {
System.out.printf("%s -> %s %s (%s) rate=%s max/txn=%s%n",
route.name(), route.country(), route.currency(), route.method(),
route.rate(), route.limits().perTransaction().max());
}
Errores
IllegalArgumentException— unsourceCurrencyno null pero vacío.RetornaB2BExceptionconcodeEnum()uno de:B2B_UNAUTHORIZED,B2B_COMPANY_NOT_FOUND— no hay compañía asociada a las credenciales,B2B_RATE_LIMITED— reintentable,B2B_UNKNOWN.RetornaAuthException— falla del intercambio de token.RetornaSdkException— falla de red o falla de deserialización.
Notas
- Los límites se mueven a medida que se consume el período — léelos en el momento de la llamada y no los guardes como una tabla fija.
rate()en una ruta es informativo para planificar un corredor; consigue la tasa real fijada para una transferencia concreta concreateQuotation.