> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.6mm.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.6mm.com/_mcp/server.

# Transferencias y conciliación de contratos

Esta guía está dirigida a **Agent Java SDK `v0.3.0`**, Java 8+ y el contrato público etiquetado. Los ejemplos se ejecutan en un backend asociado después de inicializar `client` en [Inicio rápido](/es-419/sdk/agent-sdk/java/quick-start).

## Requisitos previos de ejemplo

Los fragmentos Java comparten estas importaciones. Inicialice `client` usando el Inicio rápido y obtenga `platformUserId` del enlace guardado. Los ID de usuario/pedido de ejemplo deben reemplazarse con sus propios valores persistentes.

```java
import com.sixmm.agent.*;
import com.sixmm.agent.model.*;
import java.util.*;
```

## Transferencia de cantidad fija

Utilice `transfer` para transferencias de monto fijo. `Direction.IN` significa transferir
desde la plataforma de socios a 6MM. `Direction.OUT` significa transferir desde 6MM
volver a la plataforma de socios.

Utilice cadenas o `BigDecimal` para cantidades. No utilice `double` o `float`.

### Transferir por `agentUserId`

```java
import com.sixmm.agent.model.Direction;
import com.sixmm.agent.model.TransferRequest;
import com.sixmm.agent.model.TransferResponse;

TransferResponse resp = client.transfer(TransferRequest.fixed(
        "AGT-ORDER-1001",
        "agent-user-001",
        Direction.IN,
        "USDT",
        "10.00"));

System.out.println(resp.orderNo);
System.out.println(resp.orderStatus);
System.out.println(resp.agentUserId);
System.out.println(resp.platformUserId);
```

### Transferir por `platformUserId`

```java
TransferResponse resp = client.transfer(TransferRequest.fixedByPlatformUserId(
        "AGT-ORDER-1002",
        "1188041528",
        Direction.OUT,
        "USDT",
        "5.00"));
```

### Proporcionar ambas identificaciones

Si se proporcionan ambos ID, el servicio valida que apunten al mismo
usuario vinculado.

```java
TransferRequest req = TransferRequest
        .fixed("AGT-ORDER-1003", "agent-user-001", Direction.IN, "USDT", "20.00")
        .withPlatformUserId("1188041528");

TransferResponse resp = client.transfer(req);
```

Campos de solicitud:

| Campo            | Tipo        | Requerido        | Descripción                                            |
| ---------------- | ----------- | ---------------- | ------------------------------------------------------ |
| `agentOrderNo`   | string      | Sí               | Número de pedido de socio único a nivel mundial        |
| `agentUserId`    | string      | Condicionalmente | Requerido cuando `platformUserId` está ausente         |
| `platformUserId` | string      | Condicionalmente | Requerido cuando `agentUserId` está ausente            |
| `direction`      | enumeración | Sí               | `IN` o `OUT`                                           |
| `currency`       | string      | No               | Completado desde `defaultCurrency` cuando está ausente |
| `amount`         | string      | Sí               | Cadena de cantidad decimal                             |

Campos de respuesta:

| Campo            | Tipo   | Descripción                             |
| ---------------- | ------ | --------------------------------------- |
| `orderNo`        | string | Número de pedido de la plataforma       |
| `orderStatus`    | string | `SUCCESS`, `FAILED`, `PROCESSING`, etc. |
| `agentUserId`    | string | ID de usuario del lado del socio        |
| `platformUserId` | string | 6MM ID de usuario externo               |

## Confirmación de pedido e idempotencia

Después de llamar a `transfer`, el servicio del Agente llama sincrónicamente a la plataforma comercial.
núcleo en el camino principal. En la mayoría de los casos, la respuesta API ya contiene el
resultado central comercial sincrónico.

| Resultado    | Significado                                                     | Acción del socio                                                                              |
| ------------ | --------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
| `SUCCESS`    | Transferencia exitosa                                           | Marcar pedido local como exitoso                                                              |
| `FAILED`     | La transferencia fue rechazada o fallida                        | Guarde el motivo del error y muéstrelo cuando corresponda.                                    |
| `PROCESSING` | Tiempo de espera del núcleo comercial o incertidumbre de la red | No vuelva a intentarlo con un nuevo número de pedido. Espere a webhook o llame a `queryOrder` |

Requisitos de idempotencia:

* Utilice un `agentOrderNo` para una transacción comercial.
* Si HTTP se agota el tiempo de espera o la red falla, consulta el mismo `agentOrderNo` primero.
* Webhooks se puede volver a intentar. Deduplicarlos por clave de idempotencia.

## Transferir todo hacia afuera

`transferAllOut` mueve el saldo del lado retirable 6MM del usuario de regreso al
plataforma de socios.

```java
import com.sixmm.agent.model.TransferAllOutRequest;
import com.sixmm.agent.model.TransferAllOutResponse;

TransferAllOutResponse resp = client.transferAllOut(
        TransferAllOutRequest.of("AGT-ORDER-2001", "agent-user-001", "USDT"));

System.out.println(resp.orderStatus);
System.out.println(resp.amount);
```

Por `platformUserId`:

```java
TransferAllOutResponse resp = client.transferAllOut(
        TransferAllOutRequest.byPlatformUserId("AGT-ORDER-2002", "1188041528", "USDT"));
```

`amount` en la respuesta es el monto real transferido.

## Orden inverso

La inversión se utiliza para compensar una orden de transferencia exitosa cuando el backend
apoya el flujo inverso. Los casos típicos incluyen excepciones de pedidos locales de socios
o reversión manual de la conciliación.

```java
import com.sixmm.agent.model.ReverseOrderRequest;
import com.sixmm.agent.model.ReverseOrderResponse;

ReverseOrderResponse resp = client.reverse(ReverseOrderRequest.of(
        "AGT-ORDER-1001",
        "REV-ORDER-1001",
        "partner order rollback"));

System.out.println(resp.orderStatus);
```

Campos:

| Campo            | Tipo   | Requerido | Descripción                                   |
| ---------------- | ------ | --------- | --------------------------------------------- |
| `origOrderNo`    | string | Sí        | Número de orden de transferencia original     |
| `reverseOrderNo` | string | Sí        | Número de orden inverso único a nivel mundial |
| `reverseReason`  | string | Sí        | Razón inversa                                 |

Notas:

* La marcha atrás no es una operación de cancelación normal.
* Las órdenes inversas también deben ser idempotentes por número de orden.
* Después de revertir una orden original, webhook puede empujar la orden original
  `REVERSED` estado final.

## Orden de consulta

```java
import com.sixmm.agent.model.OrderQueryType;
import com.sixmm.agent.model.QueryOrderRequest;
import com.sixmm.agent.model.QueryOrderResponse;

QueryOrderResponse resp = client.queryOrder(
        QueryOrderRequest.of("AGT-ORDER-1001", OrderQueryType.TRANSFER_IN));

System.out.println(resp.status);
System.out.println(resp.failReason);
```

Valores `orderType` admitidos:

* `TRANSFER_IN`
* `TRANSFER_OUT`

Campos de respuesta comunes:

| Campo            | Tipo   | Descripción                      |
| ---------------- | ------ | -------------------------------- |
| `orderType`      | string | Tipo de orden                    |
| `orderNo`        | string | Número de pedido del socio       |
| `status`         | string | Estado del pedido                |
| `direction`      | string | `IN` o `OUT`                     |
| `transferMode`   | string | `FIXED_AMOUNT` o `ALL_OUT`       |
| `currency`       | string | Divisa                           |
| `amount`         | string | Cantidad                         |
| `agentUserId`    | string | ID de usuario del lado del socio |
| `platformUserId` | string | 6MM ID de usuario externo        |
| `failReason`     | string | Motivo del fracaso               |
| `createdAt`      | string | tiempo de creación               |
| `completedAt`    | string | tiempo de finalización           |

## Listar pedidos

```java
import com.sixmm.agent.model.ListOrdersRequest;
import com.sixmm.agent.model.ListOrdersResponse;

ListOrdersRequest req = ListOrdersRequest.page(1, 20);
req.orderType = "TRANSFER_IN";
req.status = "SUCCESS";
req.startTime = "2026-06-01T00:00:00Z";
req.endTime = "2026-06-16T00:00:00Z";

ListOrdersResponse resp = client.listOrders(req);

System.out.println(resp.total);
resp.orders.forEach(order -> System.out.println(order.orderNo));
```

Recomendaciones de paginación:

* `page` comienza desde 1.
* Mantenga `pageSize` en 100 o menos.
* Para trabajos de conciliación, página por ventana de tiempo y deduplicación por `orderNo`.

## Guías fuente y relacionadas

* [Fuente oficial v0.3.0](https://github.com/6mm-com/agent-java-sdk/tree/54aa3c1)
* [Descripción general de consultas y paginación](/es-419/sdk/agent-sdk/java/perpetual-queries)
* [Cartera de financiación](/es-419/sdk/agent-sdk/java/funding-wallet)
* [Guía de actualización](/es-419/sdk/agent-sdk/java/upgrade)

## Devoluciones de llamadas de eventos de fondos

`transfer.completed` puede llevar `SUCCESS`, `FAILED`, o una actualización del pedido original de `REVERSED`; `reverse.completed` es un evento terminal de orden de reversión. `transfer.dead` significa que el estado final permanece sin confirmar después de los reintentos y necesita una conciliación manual, no un error confirmado. El nombre del evento por sí solo no prueba que se hayan acreditado los fondos.

El reconocimiento exitoso es distinto del movimiento de fondos exitoso: después de registrar una notificación `targetStatus=FAILED` válida, devuelve también HTTP 2xx. Persistir en la deduplicación de eventos de fondos por parte de `orderType:orderId:targetStatus` dentro del alcance del comerciante y `environment`.

[Campos de eventos y JSON ejemplos](/es-419/sdk/agent-sdk/java/webhook-events) · [Verificación de firma, respuestas y reintentos](/es-419/sdk/security/webhooks-idempotency)