> 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.

# Transferts et rapprochements de contrats

Ce guide cible **Agent Java SDK `v0.3.0`**, Java 8+ et le contrat public étiqueté. Exemples exécutés dans un backend partenaire après l'initialisation de `client` dans [Démarrage rapide](/fr/sdk/agent-sdk/java/quick-start).

## Exemples de prérequis

Les extraits de code Java partagent ces importations. Initialisez `client` à l'aide de Quick Start et obtenez `platformUserId` à partir de la liaison enregistrée. Les exemples d’ID utilisateur/commande doivent être remplacés par vos propres valeurs persistantes.

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

## Transfert à montant fixe

Utilisez `transfer` pour les transferts d'un montant fixe. `Direction.IN` signifie transférer
de la plateforme partenaire vers 6MM. `Direction.OUT` signifie un transfert depuis 6MM
retour à la plateforme partenaire.

Utilisez des chaînes ou `BigDecimal` pour les montants. N'utilisez pas `double` ou `float`.

### Transfert par `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);
```

### Transfert par `platformUserId`

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

### Fournir les deux identifiants

Si les deux identifiants sont fournis, le service valide qu'ils pointent vers le même
utilisateur lié.

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

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

Champs de requête :

| Champ            | Taper       | Requis         | Description                                           |
| ---------------- | ----------- | -------------- | ----------------------------------------------------- |
| `agentOrderNo`   | string      | Oui            | Numéro de commande partenaire unique au monde         |
| `agentUserId`    | string      | Sous condition | Obligatoire lorsque `platformUserId` est absent       |
| `platformUserId` | string      | Sous condition | Obligatoire lorsque `agentUserId` est absent          |
| `direction`      | énumération | Oui            | `IN` ou `OUT`                                         |
| `currency`       | string      | Non            | Rempli à partir de `defaultCurrency` en cas d'absence |
| `amount`         | string      | Oui            | Chaîne de montant décimal                             |

Champs de réponse :

| Champ            | Taper  | Description                             |
| ---------------- | ------ | --------------------------------------- |
| `orderNo`        | string | Numéro de commande de la plateforme     |
| `orderStatus`    | string | `SUCCESS`, `FAILED`, `PROCESSING`, etc. |
| `agentUserId`    | string | ID utilisateur côté partenaire          |
| `platformUserId` | string | 6MM ID utilisateur externe              |

## Confirmation de commande et idempotence

Après l'appel de `transfer`, le service Agent appelle de manière synchrone le trading
noyau sur le chemin principal. Dans la plupart des cas, la réponse API contient déjà le
résultat de trading synchrone.

| Résultat     | Signification                                                  | Action du partenaire                                                                          |
| ------------ | -------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
| `SUCCESS`    | Transfert réussi                                               | Marquer la commande locale comme réussie                                                      |
| `FAILED`     | Le transfert a été rejeté ou a échoué                          | Enregistrez la raison de l'échec et affichez-la le cas échéant                                |
| `PROCESSING` | Délai d’expiration du cœur de trading ou incertitude du réseau | Ne réessayez pas avec un nouveau numéro de commande. Attendez webhook ou appelez `queryOrder` |

Exigences d'idempotence :

* Utilisez un `agentOrderNo` pour une transaction commerciale.
* Si HTTP expire ou si le réseau tombe en panne, interrogez d'abord le même `agentOrderNo`.
* Webhooks peut être réessayé. Dédupliquez-les par clé d'idempotence.

## Transférer tout

`transferAllOut` déplace le solde côté 6MM retirable de l'utilisateur vers le
plateforme partenaire.

```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);
```

Par `platformUserId` :

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

`amount` dans la réponse correspond au montant réel transféré.

## Ordre inversé

Reverse est utilisé pour compenser un ordre de transfert réussi lorsque le backend
prend en charge le flux inverse. Les cas typiques incluent les exceptions de commande locale du partenaire
ou une restauration manuelle du rapprochement.

```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);
```

Champs :

| Champ            | Taper  | Requis | Description                                 |
| ---------------- | ------ | ------ | ------------------------------------------- |
| `origOrderNo`    | string | Oui    | Numéro d'ordre de transfert d'origine       |
| `reverseOrderNo` | string | Oui    | Numéro de commande inversée unique au monde |
| `reverseReason`  | string | Oui    | Raison inverse                              |

Remarques :

* L’inversion n’est pas une opération d’annulation normale.
* Les commandes inversées doivent également être idempotentes par numéro de commande.
* Une fois qu'une commande initiale est annulée, webhook peut repousser la commande initiale.
  `REVERSED` état final.

## Ordre de requête

```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);
```

Valeurs `orderType` prises en charge :

* `TRANSFER_IN`
* `TRANSFER_OUT`

Champs de réponse courants :

| Champ            | Taper  | Description                      |
| ---------------- | ------ | -------------------------------- |
| `orderType`      | string | Type de commande                 |
| `orderNo`        | string | Numéro de commande du partenaire |
| `status`         | string | Statut de la commande            |
| `direction`      | string | `IN` ou `OUT`                    |
| `transferMode`   | string | `FIXED_AMOUNT` ou `ALL_OUT`      |
| `currency`       | string | Devise                           |
| `amount`         | string | Montant                          |
| `agentUserId`    | string | ID utilisateur côté partenaire   |
| `platformUserId` | string | 6MM ID utilisateur externe       |
| `failReason`     | string | Raison de l'échec                |
| `createdAt`      | string | Temps de création                |
| `completedAt`    | string | Temps de réalisation             |

## Liste des commandes

```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));
```

Recommandations de pagination :

* `page` commence à 1.
* Gardez `pageSize` à 100 ou moins.
* Pour les tâches de réconciliation, page par fenêtre horaire et déduplication avant `orderNo`.

## Source et guides associés

* [Source officielle v0.3.0](https://github.com/6mm-com/agent-java-sdk/tree/54aa3c1)
* [Présentation et pagination des requêtes](/fr/sdk/agent-sdk/java/perpetual-queries)
* [Portefeuille de financement](/fr/sdk/agent-sdk/java/funding-wallet)
* [Guide de mise à niveau](/fr/sdk/agent-sdk/java/upgrade)

## Rappels d'événements de fonds

`transfer.completed` peut contenir `SUCCESS`, `FAILED` ou une mise à jour de commande originale de `REVERSED` ; `reverse.completed` est un événement terminal d'ordre d'inversion. `transfer.dead` signifie que l'état final n'est pas confirmé après de nouvelles tentatives et nécessite une réconciliation manuelle, et non un échec confirmé. Le nom de l’événement à lui seul ne prouve pas que les fonds ont été crédités.

Un accusé de réception réussi est distinct d'un mouvement de fonds réussi : après avoir enregistré une notification `targetStatus=FAILED` valide, renvoyez également HTTP 2xx. Conserver la déduplication des événements de fonds par `orderType:orderId:targetStatus` au sein du commerçant et dans la portée de `environment`.

[Champs d'événement et exemples de JSON](/fr/sdk/agent-sdk/java/webhook-events) · [Vérification de signature, réponses et tentatives](/fr/sdk/security/webhooks-idempotency)